Iterator Pattern(迭代模式)
这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。
迭代器模式属于行为型模式
参考来源与 《图解设计模式》
代码结构

场景
建立一个书架 放入书籍
使用书架迭代器遍历书籍
代码
Iterator
建立迭代接口
package codeInHere
//建立迭代接口
type Iterator interface {
HasNext() bool //
Next() interface{}
}
aggregate
建立一个用于遍历集合的迭代器
package codeInHere
//建立一个用于便利集合的迭代器
type aggregate interface {
Iterator() BookshelfIterator
}
Book
建立书籍结构体
package codeInHere
//建立书籍结构体
type Book struct {
bookName string
}
func (b *Book) GetName() string{
return b.bookName
}
func NewBook(name string) Book{
return Book{bookName:name}
}
BookShelf
建立书架结构体 实现迭代器接口
package codeInHere
// 建立书架结构体
type BookShelf struct {
books []Book
index int
}
func NewBookShelf(size int ) *BookShelf{
return &BookShelf{
books: make([]Book,size,size*2),
index: 0,
}
}
func (b *BookShelf) AppendBook(book Book){
b.books[b.index] = book
b.index++
}
func (b *BookShelf) GetLength() int {
return len(b.books)
}
func (b *BookShelf) GetBook(index int) Book{
return b.books[index]
}
//实现迭代器接口
func (b *BookShelf) Iterator() Iterator{
return NewBookSherlIterator(b)
}
BookshelfIterator
创建书架迭代 实现迭代接口
package codeInHere
type BookshelfIterator struct {
bookshelf *BookShelf
index int
}
func NewBookSherlIterator(shelf *BookShelf) *BookshelfIterator {
return &BookshelfIterator{
bookshelf: shelf,
index: 0,
}
}
//实现迭代接口
func (b *BookshelfIterator) Next() (book interface{}){
book = b.bookshelf.books[b.index]
b.index++
return
}
//实现迭代接口
func (b *BookshelfIterator) HasNext() bool{
if b.index < b.bookshelf.GetLength(){
return true
}
return false
}
测试代码
package main
import (
"designPatterns/IteratorDemo/codeInHere"
"fmt"
)
func main() {
bookShelf := codeInHere.NewBookShelf(4)
bookShelf.AppendBook(codeInHere.NewBook("原则"))
bookShelf.AppendBook(codeInHere.NewBook("第二曲线"))
bookShelf.AppendBook(codeInHere.NewBook("创业维艰"))
bookShelf.AppendBook(codeInHere.NewBook("规模"))
it := bookShelf.Iterator()
for it.HasNext(){
//类型断言
tmp := it.Next().(codeInHere.Book)
fmt.Println(tmp.GetName())
}
}
// 输出:
// 原则
// 第二曲线
// 创业维艰
// 规模

242

被折叠的 条评论
为什么被折叠?



