mirror of
https://github.com/Estom/notes.git
synced 2026-04-01 18:11:42 +08:00
go知识重新整理
This commit is contained in:
67
Go/DesignPattern/Iterator/iterator.go
Normal file
67
Go/DesignPattern/Iterator/iterator.go
Normal file
@@ -0,0 +1,67 @@
|
||||
package iterator
|
||||
|
||||
import "fmt"
|
||||
|
||||
//迭代器模式:使用相同的方式 迭代不同类型的集合 或者隐藏集合类型的具体实现
|
||||
|
||||
//聚合
|
||||
type Aggregate interface {
|
||||
Iterator() Iterator
|
||||
}
|
||||
|
||||
type Iterator interface {
|
||||
First()
|
||||
IsDone() bool
|
||||
Next() interface{}
|
||||
}
|
||||
|
||||
//NewNumbers
|
||||
func NewNumbers(start, end int) *Numbers {
|
||||
return &Numbers{
|
||||
start: start,
|
||||
end: end,
|
||||
}
|
||||
}
|
||||
|
||||
type Numbers struct {
|
||||
start, end int
|
||||
}
|
||||
|
||||
//NumbersIterator implement Iterator interface
|
||||
func (n *Numbers) Iterator() Iterator {
|
||||
return &NumbersIterator{
|
||||
numbers: n,
|
||||
next: n.start,
|
||||
}
|
||||
}
|
||||
|
||||
//NumbersIterator
|
||||
type NumbersIterator struct {
|
||||
numbers *Numbers
|
||||
next int
|
||||
}
|
||||
|
||||
func (i *NumbersIterator) First() {
|
||||
i.next = i.numbers.start
|
||||
}
|
||||
|
||||
func (i *NumbersIterator) IsDone() bool {
|
||||
return i.next > i.numbers.start
|
||||
}
|
||||
|
||||
func (i *NumbersIterator) Next() interface{} {
|
||||
if !i.IsDone() {
|
||||
next := i.next
|
||||
i.next++
|
||||
return next
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
//迭代打印
|
||||
func IteratorPrint(i Iterator) {
|
||||
for i.First(); !i.IsDone(); {
|
||||
c := i.Next()
|
||||
fmt.Printf("%#v\n", c)
|
||||
}
|
||||
}
|
||||
16
Go/DesignPattern/Iterator/iterator_test.go
Normal file
16
Go/DesignPattern/Iterator/iterator_test.go
Normal file
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* @Author:zhoutao
|
||||
* @Date:2020/12/12 下午12:04
|
||||
* @Desc:
|
||||
*/
|
||||
|
||||
package iterator
|
||||
|
||||
//以相同的方式迭代不同类型的集合
|
||||
|
||||
func ExampleIterator() {
|
||||
var aggregate Aggregate
|
||||
aggregate = NewNumbers(1, 10)
|
||||
|
||||
IteratorPrint(aggregate.Iterator())
|
||||
}
|
||||
Reference in New Issue
Block a user