《大話設計模式》讀書筆記(七)
阿新 • • 發佈:2020-12-29
寫在前面
本文上接《大話設計模式》讀書筆記(六),這次來學習單例模式、橋接模式、命令模式。
14.單例模式(Singleton Pattern)
解決的問題
單例模式可以建立一個類的全域性唯一的例項,使得資源得到節約。
類圖結構
這個類圖很簡單,只有一個Singleton類:
class Singleton{ private static Singleton instance; private Singleton(){ } public static Singleton GetInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } }
好處與壞處
單例模式的好處十分明顯,單例模式可以嚴格的控制唯一例項的受控訪問。但缺點在於不適用於變化的物件,如果同一型別的物件總是要在不同的用例場景發生變化,單例就會引起資料的錯誤,不能儲存彼此的狀態。
15.橋接模式(Bridge Pattern)
解決的問題
可以把抽象和實現分離,橋接模式解決的是類屬性多維度變化問題,把類的抽象層次結構和類的實現層級結構解耦。
類圖結構
這個類圖看著還是比較複雜的,首先是一個Abstraction
類,代表抽象,Implementor
代表實現類,RefinedAbstraction
代表被提煉的抽象,ConcreteImplementor
A和B代表兩個具體的實現。
Implementor類:
abstract class Implementor{
public abstract void Operation()
}
ConcreteImplementorA 和 ConcreteImplementorB類:
class ConcreateImplementorA : Implementor{ public override void Operation(){ Console.WriteLine("具體實現A的方法執行"); } } class ConcreateImplementorB : Implementor{ public override void Operation(){ Console.WriteLine("具體實現B的方法執行"); } }
Abstract類:
class Abstraction{
protected Implementor implementor;
public void SetImplementor(Implementor implementor){
this.implementor = implementor;
}
public virtual void Operation(){
implementor.Operation();
}
}
RefinedAbstraction類:
class RefinedAbstraction : Abstraction{
public override void Operation(){
implementor.Operation();
}
}
好處與壞處
橋接模式的好處,就在於能夠把這種多維度的變化分離出來獨立變化,減少他們的耦合。但缺點是會使得系統變得很複雜,更加難以維護。
16.命令模式(Command Pattern)
解決的問題
命令模式,將一個請求封裝成一個物件,可以降低耦合度,更加容易擴充套件。適用於發起的命令比較複雜的情況。
類圖結構
好處與壞處
-
降低耦合度.
-
新增一個命令/一組命令簡單.
-
呼叫同一方法實現不同功能.
壞處:
會產生過多具體命令類.
總結
這次學習了三個模式