大話設計模式筆記(十六、十七、十八、十九、二十)

十六、狀態模式(State)

定義:當一個對象的內在狀態改變時允許改變其行爲,這個對象看起來像是改變了其類。

應用場景:狀態模式主要解決的是當控制一個對象狀態轉換的條件表達式過於複雜的情況時,把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。

1、面向對象設計其實就是希望做到代碼的責任分解

十七、適配器模式(Adapter)

定義:將一個類的接口轉換成客戶希望的另外一個接口,adapter模式使得原本由於接口不兼容而不能一起工作的那些類可以一起工作。

1、系統的數據和行爲都正確,但是接口不符時,我們應該考慮用適配器,目的是使控制範圍之外的一個原有對象與某個接口匹配。適配器模式主要應用於希望複用的一些現存的類,但是接口又與複用環境要求不一致的情況。

2、使用一個已存在的類,如果它的接口,也就是它的方法和你要求不相同時,就應該考慮用適配器模式。

3、兩個類所做的事情相同或相似,但是具有不同的接口時要使用它

十八、備忘錄模式(Memento)

定義:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以後就可將該對象恢復到原先保存的狀態。

1、備忘錄模式其實本質就是把多個變量的保存封裝到一個類中,通過類的封裝來實現業務的分離,如果不用類,那麼只能進行基礎類型的複製,業務上不清晰,通過封裝狀態類,可以實現對管理備忘的隔離細節。

十九、組合模式(Composite)

定義:將對象組合成樹形結構以表示‘部分-整體’的層次結構。組合模式使得用戶對單個對象和組合對象的使用具有一致性。

個人感悟:可以考慮一下聚合關係,即一個類由多個類組成,如雁羣類由多隻大雁類聚合而成,公司類由多個子公司聚合而成,組合關係就是在某些需求下,一般是有整體局部關係時,讓子公司繼承公司類,這樣單個類和聚合類都具有相同的接口,可以滿足整體局部的關係,其實接口也是能實現這樣的關係,但是接口相當於還要多加類,其實就是把接口內聚到單個類上,讓其他類繼承單個類,從而實現組合。

1、當你發現需求中是體現與整體層次的結構時,以及你希望用戶可以忽略聚合對象與單個對象的不同,統一使用組合結構中的所有對象時,就應該考慮用組合模式

2、組合模式讓客戶可以一致地使用組合結構和單個對象

二十、迭代器模式(Iterator)

定義:提供一種方法順序訪問一個聚合對象中各個元素,而又不暴露該對象的內部表示。

個人感悟:其實各種模式就是爲了滿足各種需求,迭代器就是添加了列表的接口,使列表通過迭代器能夠表現迭代器的行爲,而不需要關注列表本身,這在map、list等場景下很常見,所以java等高級語言已經在語言層面實現了迭代器模式。

1、當你需要訪問一個聚集對象,而且不管這些對象是什麼都需要遍歷的生活,你就應該考慮用迭代器模式

2、迭代器模式就是分離了集合對象的遍歷行爲,抽象出一個迭代器類來負責,這樣既可做到不暴露集合的內部結構,又可讓外部代碼透明地訪問集合內部的數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章