物件導向程式設計<=>面向介面程式設計:
細節依賴抽象而非抽象依賴細節,面向介面而非實現程式設計。例如,面向過程程式設計時,將常用函式寫成程式庫,高層模組利用這些資料庫。但當新的需求與以往需求高層業務邏輯相似、只想改變資料庫或儲存方式時,由於高層模組與低層資料庫**,無法復用這些高層模組。
物件導向三大特性:封裝、繼承、多型。
物件導向的好處:可維護、可拓展、可復用、靈活性好。
應猜測最可能出現的變化種類,並通過抽象來隔離這些變化;但刻意抽象所有功能不可取。
單一職責:乙個類只能由乙個動機引起變化。
黎克特制代換原則:子型別必須能替換掉它們的父類。正因此,才能在軟體不受影響的基礎上拓展新功能。
迪公尺特法則:如果兩個類沒有相互作用的必要,它們就不要直接互動。如果其中乙個類需要呼叫另乙個類的方法,使用第三個類。
簡單工廠模式:由factory類進行例項化。
工廠模式:由factory類的子類進行例項化,子類的同名方法只需要return乙個相應的類的物件;將選擇的任務交給了客戶端。
工廠模式的好處:例項化多個物件時,易於更改。
//簡單工廠
operation* operation1 = new factory.createoperation('+');//when the type of calculation
operation* operation2 = new factory.createoperation('+');//needs changing, there are
operation* operation3 = new factory.createoperation('+');//3 changes
//工廠
factory* factory = new addfactory();//when the type of calculation needs changing, just change it here
operation* operation1 = factory.createoperation();
operation* operation2 = factory.createoperation();
operation* operation3 = factory.createoperation();
策略模式:一系列演算法功能相同,只是實現不同。
策略模式的好處:由於傳入的引數的型別不同,context類「選擇」了應該例項化哪乙個子類(context的方法只需要呼叫父類的同名方法),因此就通過繼承、多型避免了冗長的條件語句;每個演算法都有自己的類、自己的介面,某乙個演算法的改變不會影響其他演算法,因此單元測試更容易;它用相同方法呼叫所有演算法,讓使用者知道乙個類(context),從而隱藏了具體實現方法、降低了耦合性。
裝飾模式:子類的方法中呼叫父類的同名方法。
裝飾模式的好處:裝飾功能在單獨乙個類中,將其與核心功能分開。
**模式:proxy類和realsubject類實現完全相同的介面,proxy類的方法只是呼叫了realsubject類的同名方法。
**模式的應用:
3.安全**。來控制真實物件訪問時的許可權。
4.智慧型指引。呼叫真實物件時,**處理另外一些事情。例如:第一次訪問某持久物件時將它放入記憶體;訪問某個物件前檢查是否已經鎖定它。
原型模式:當需要建立多個引數相同的例項時,只需要建立乙個,其他的呼叫clone()即可。clone():建立當前物件的淺表副本。方法建立乙個新物件,然後將當前物件的非靜態字段複製到該新物件。若當前物件是值型別,則逐位複製;若為引用或指標,則複製引用或指標而不複製物件。
外觀模式:為乙個層/多個類編寫乙個介面。使這些層/類的呼叫者不必了解複雜的實現細節、不會被更改影響。
建造者模式:用乙個方法呼叫一系列方法,由乙個指揮者類選擇應該呼叫哪個建造者。通常這一系列方法會一起被呼叫。
(持續更新……)
大話設計模式 筆記
簡單工廠模式 建立物件 switch 靜態工廠 策略模式 封裝變化 商品售賣 裝飾模式 在類的外部封裝新的功能 外部類要擁有對目標類的引用 模式 小明託小白追小紅 小明小紅豆實現了追求的介面 小白的實現追求介面呼叫小明的追求方法 工廠方法模式 與簡單工廠模式的區別 工廠模式是簡單工廠模式的進一步抽象...
《大話設計模式 工廠模式》筆記
1 簡單工廠模式的最大優點在於工廠類中包含了必要的邏輯判斷,根據客戶端的選擇條件動態例項化相關的類,對於客戶端來說,除去了與具體產品的依賴。2 簡單工廠模式的問題 新增需要生產的類時,需要修改類的 違背了開放 封閉原則。3 工廠方法模式 factory method 定義乙個用於建立物件的介面,讓子...
《大話設計模式 外觀模式》筆記
1 外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。2 外觀模式結構圖 2 簡單 實現 四個子系統類 public class subsystema public class subsystemb public class...