迭代器模式是什么
迭代器模式是一種行為設計模式, 讓你能在不暴露集合底層表現形式 (串列、 堆疊和樹等) 的情況下遍歷集合中所有的元素,
為什么用迭代器模式
當集合背后為復雜的資料結構, 且你希望對客戶端隱藏其復雜性時(出于使用便利性或安全性的考慮),可以使用迭代器模式,迭代器封裝了與復雜資料結構進行互動的細節,為客戶端提供多個訪問集合元素的簡單方法,這種方式不僅對客戶端來說非常方便,而且能避免客戶端在直接與集合互動時執行錯誤或有害的操作, 從而起到保護集合的作用,
迭代器模式怎么實作
迭代器模式的主要思想是將集合背后的迭代邏輯提取至不同的名為迭代器的物件中,迭代器提供了一種方法用于在集合上進行迭代,
collection.go 集合
package iterator
type collection interface {
createIterator() iterator
}
type user struct {
name string
age int
}
type userCollection struct {
users []*user
}
func (u *userCollection) createIterator() iterator {
return &userIterator{
users: u.users,
}
}
iterator.go 迭代器
package iterator
type iterator interface {
hasNext() bool
getNext() *user
}
type userIterator struct {
index int
users []*user
}
func (u *userIterator) hasNext() bool {
if u.index < len(u.users) {
return true
}
return false
}
func (u *userIterator) getNext() *user {
if u.hasNext() {
user := u.users[u.index]
u.index++
return user
}
return nil
}
example.go 客戶端呼叫示例
package iterator
import "fmt"
func Example() {
user1 := &user{
name: "a",
age: 30,
}
user2 := &user{
name: "b",
age: 20,
}
userCollection := &userCollection{
users: []*user{user1, user2},
}
iterator := userCollection.createIterator()
for iterator.hasNext() {
user := iterator.getNext()
fmt.Printf("User is %+v\n", user)
}
}
優點
- 單一職責原則, 通過將體積龐大的遍歷演算法代碼抽取為獨立的類, 你可對客戶端代碼和集合進行整理,
- 開閉原則, 你可實作新型的集合和迭代器并將其傳遞給現有代碼, 無需修改現有代碼,
缺點
- 如果你的程式只與簡單的集合進行互動, 應用該模式可能會矯枉過正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/458682.html
標籤:其他
下一篇:設計原則之SOLID 原則
