前言:筆者在最開始寫程式的時候經常會遇到一種情況,例如更改乙個字段、或者新增一種小功能,就要把原來寫過的東西幾乎廢棄掉,或者更改大量以前寫過的**。又或者自己寫的東西時間久了再去回顧,完全找不到到時為什麼這麼寫的頭緒,如果遇到了bug更是無法快速定位在**小範圍出現的問題。如果你也經常遇到這種問題,就說明你現階段非常需要學習下設計模式了。
在網上經常說的設計模式有23種,也有一些更多的設計模式,無非也是從這些設計模式中變種而來。如果讓筆者來形容什麼是設計模式,我認為設計模式是:一種思想,一種模式,一種套路,一種解決問題的高效策略。在日常開中我們一定用到過foreach
。 這種遍歷方式可以在 array ilist idictionary等資料結構中通用。其實他的實現其實就是用到的迭代器模式,今天筆者就跟大家說一說迭代器的實現方式。迭代器模式(iteratorpattern)提供一種方法順序訪問乙個聚合物件中各個元素,而又不暴露該物件的內部表示。下面筆者逐步完成迭代器模式的構建首先我們先建立乙個簡單的集合public class group
}public object this[int index]
set }}
為了讓多種集合都能使用同一種遍歷方式,我們再建立乙個通用迭代器public class iterator
private int index = -1;
public object current
}public bool movenext()
public void reset()
}
然後我們把迭代器鑲嵌到這個集合中呼叫~這樣我們乙個簡單的迭代器就完成了public class group
}public object this[int index]
set
}public iterator getiterator()
}
void start()
是不是很簡單呢?接下來我們開始重構
在iterator
中我們不能確定這個遍歷的集合是列表、字典還是陣列,但是我們可以確定他們都含有current
、movenext
與reset
三種元素所以我們將這三種元素進行抽象,與原來的迭代器類進行剝離public inte***ce iteratorbase
bool movenext();
void reset();
}
原迭代器類繼承介面iteratorbasepublic class iterator: iteratorbase
private int index = -1;
public object current
}public bool movenext()
public void reset()
}
既然原迭代器類繼承介面iteratorbase,那麼以可以根據這個介面所規定的結構,讓細節的實現統統轉移到子類中實現,也就是說,我們可以定義出多種滿足不同迭代需求的迭代類,但是呼叫的函式都是一樣的,因為都繼承自iteratorbase。根據黎克特制替換原則我們知道,對應的group中所返回的public iterator getiterator()
完全可以用介面iteratorbase
代替public class group
}public object this[int index]
set
}public iteratorbase getiterator()
}
最後,為了區分什麼樣子的集合可以使用通用迭代模式,我們做乙個獲得迭代器的介面,只要繼承這個介面的集合,就都可以使用通用迭代模式了public inte***ce ienumerable
public class group: ienumerable
}public object this[int index]
set
}public iteratorbase getiterator()
}
經過剝離和抽象,我們的迭代器模式就完成了。迭代器就是把原有需要遍歷的結構進行一次包裝,把包裝後的結構再統一進行遍歷其實在c# 中自帶的迭代器要比我們這個更強大,他最大的特點就是按需逐步查詢unity 之資料集合解析中的最後ienumerable補充部分有例子說明,這裡就不在熬述。所以說微軟有更好的,就用微軟的,這種無用的輪子我們還是不要浪費時間再造了,了解下原理就好。
Unity 話大 設計模式之抽象工廠
前言 筆者在最開始寫程式的時候經常會遇到一種情況,例如更改乙個字段 或者新增一種小功能,就要把原來寫過的東西幾乎廢棄掉,或者更改大量以前寫過的 又或者自己寫的東西時間久了再去回顧,完全找不到到時為什麼這麼寫的頭緒,如果遇到了bug更是無法快速定位在 小範圍出現的問題。如果你也經常遇到這種問題,就說明...
Unity 話大 設計模式之工廠方法
前言 筆者在最開始寫程式的時候經常會遇到一種情況,例如更改乙個字段 或者新增一種小功能,就要把原來寫過的東西幾乎廢棄掉,或者更改大量以前寫過的 又或者自己寫的東西時間久了再去回顧,完全找不到到時為什麼這麼寫的頭緒,如果遇到了bug更是無法快速定位在 小範圍出現的問題。如果你也經常遇到這種問題,就說明...
設計模式之迭代器模式
概念 提供一種方法順序訪問乙個聚合物件中各個元素,而又不需暴露該物件的內部表示。main 客戶 iproject,產品介面 cproject,產品類 iiterator,迭代器介面 iprojectiterator,產品迭代器介面 cprojectiterator,產品迭代器實現類 說明 cproj...