迭代器模式
迭代器模式允許使用一個標準的介面順序訪問一個資料列表或集合,而又不需要知道資料的內部表示細節。另外,可以定義專用迭代器,讓他完成一些特殊操作並且只返回資料集合中的特定元素。
迭代器模式的效果:
1 資料修改
迭代器中最重要的問題是,遍曆資料的同時資料者昂在被修改。如果讀者的程式碼搜尋範圍較寬,只是偶爾才移向下一個元素,就有可能在訪問集合的同時,底層集合正在添加或刪除元素,也可能有另一個線程改變了集合。對這一問題沒有簡單的解決方案。如果讀者想使用迭代器順序訪問一些列資料並刪除特定的項目,要當心這種操作的後果。添加或刪除一個元素意味著可能會遺漏掉某一元素或對同一元素訪問了兩次,這和讀者所用的儲存機制有關。
2 特權訪問
迭代器需要對基本容器類的底層資料結構具有特殊存取權限,這樣才能訪問資料。如果資料存放區在一個ArrayList或Hashtable中,這很容易做到,但如果是儲存在一個類裡的其他集合結構裡,就只能通過get操作使用該結構。另一種方法是,讓迭代器成為容器類的一個衍生類別,直接存取其中的資料。
3 外部迭代器與內部迭代器
“Design Pattems”中描述了兩種迭代器:外部的和內部的。迄今為止,只介紹了外部迭代器。內部迭代器是能順序訪問整個集合的一些方法,不需要使用者發出任何明確的請求就能直接對每個元素進行操作。這在c#中比較少見,但可以將這些方法設想成,規範一個集合中的資料值,使之處於0到1的範圍,或者將字串中的所有字元轉換成特定格式。總的來說,外部迭代器給讀者更多的控制權,因為調用程式可直接存取每個元素,並能決定是否對元素執行操作。
中介者模式
中介者作為唯一知道其他類中方法細節的一個類,在類發生變化時通知中介者,中介者在將這些變化傳遞給其他需要通知的類
中介者模式的效果:
1 當一個類的動作要受另一個類的狀態影響時,中介者模式可以防止這些類變得混亂
2 使用中介者很容易修改一個程式的行為。
3 可以添加新的控制項或類,除了改變中介者外,不用改動任何部分。
4 中介者解決了每個command對象要對使用者介面中的其他對象和方法瞭解太多的問題
5 中介者變成了一個萬能類,知道太多其他部分程式的資訊,這會使他難以修改和維護。
6 每個中介者都是一個指定的類,要擁有的每個同事要調用方法,並知道每個同事有哪些可用的方法,這使得在不同項目中重用中介者變得很困難。