工廠類中包含了必要的邏輯判斷,根據呼叫者的選擇動態例項化相關類的物件,去除了呼叫者和具體產品的依賴;
不足:違背了開放封閉原則:改變時要更改工廠類中**;
公升級版:
好處:滿足開放封閉原則:改變時,不需要改原工廠方法的**,只要新增乙個具體工廠即可;
不足:但將簡單工廠的內部邏輯判斷移到了呼叫者中,因此改變時要修改呼叫者端的**;
好處:易於交換產品系列,只要改變乙個具體工廠,即可使用不同的產品配置;
不足:增加功能時,對**增加和改動都很大;
公升級版:用簡單工廠來改進抽象工廠
公升級版:再引入「配置檔案(儲存字串變數)+反射機制(可以用字串變數來動態建立物件)」解決簡單工廠中 要用邏輯判斷將工廠類中**寫死弊端 ; 這樣一來,完美!!
缺點:變化時,需要在客戶端來改**;可以採用簡單「工廠模式+策略模式」來解決這一問題;
裝飾者抽象類實現了抽象物件介面並持有抽象物件介面的引用,採用顯式聚合方式:setcompent(抽象物件)來獲取具體物件的引用, 在此基礎上擴充套件其功能;
靈活看待:只有乙個具體物件時,沒必要有抽象介面,可以令裝飾者抽象類是具體物件類的子類來實現其功能;當然,若只有乙個裝飾者類時,也沒必要有裝飾者抽象類;
**類實現了抽象物件介面並持有真實物件的引用,採用隱式聚合方式:request()來獲取真實物件的引用,稱為其**;
適用場合:遠端**,虛擬**,安全**,智慧型指引;
物件中存在引用型別成員屬性時:淺複製(只複製引用,不複製物件;原物件與其副本引用同一屬性物件) 與深複製(只複製引用,也複製物件,原物件與其副本引用不同屬性物件)
將不變的行為搬移到超類,去除子類中的重複**,可實現**復用;
適用場合:設計是令層與層的降低耦合;開發時減少子系統間的依賴;維護遺留系統時,同新系統互動;
適用場合:當前建立物件的方法,獨立於 物件的組成部分和裝配方式時;用於建立複雜物件:其內部建造順序穩定但每一步通常面臨著複雜的變化;
使用場合:當乙個物件的改變,不知道要影響多少具體物件改變時;
不足:當使用他人寫好的控制項時,無法實現自定義的觀察者抽象介面,而且不管每個具體觀察者的行為如何,方法名還必須相同才行;
公升級版:
事件委託機制:不需要實現同一介面,去除了抽象觀察介面,讓各個觀察者的方法名可以不同; 例如:事件監聽
注:委託是一種引用方法的型別,是對方法的抽象,委託例項就是乙個具體的方法;
前提:委託中方法要擁有相同的引數和返回值型別;
大話設計模式(一)
物件導向設計四大原則 單一原則 乙個類應該只有乙個引起它變化的原因。如果乙個類擔任的職責過多,就等於把這些職責耦合在一起,一旦乙個職責發生改變,很可能會削弱或者抑制其他職責的能力,即要求耦合度盡可能低。開放 關閉原則 對擴充套件開發,對修改關閉。在乙個軟體開發中,常常需要擴充套件專案,我們應該盡可能...
大話設計模式讀後感之工廠模式
一 物件導向思維 oop 何為物件導向,我舉個例子 在北宋前,人們每當要影印新東西,都需要從新雕刻。當活字印刷術出現後,就省事多了。活字印刷術作為物件具有屬性和方法 1 封裝 用的人不需要會雕刻只要認字就行了 便維護 2 繼承 如果有缺少的字,只需要增加 可擴充套件 3 多型 可以應付各種印刷問題 ...
大話設計模式讀後感之外觀模式
外觀模式 為子系統中的一組介面提供乙個一致的介面。此模式定義了乙個高層介面,這個介面使得這個子系統更加容易使用。類 created with intellij idea.user yebinghuan created on 2017 8 9.description public class faca...