1. 程式人生 > 實用技巧 >《大話設計模式》讀書筆記(七)

《大話設計模式》讀書筆記(七)

寫在前面

本文上接《大話設計模式》讀書筆記(六),這次來學習單例模式、橋接模式、命令模式。

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代表被提煉的抽象,ConcreteImplementorA和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)

解決的問題

命令模式,將一個請求封裝成一個物件,可以降低耦合度,更加容易擴充套件。適用於發起的命令比較複雜的情況。

類圖結構

好處與壞處

  • 降低耦合度.

  • 新增一個命令/一組命令簡單.

  • 呼叫同一方法實現不同功能.

    壞處:

    會產生過多具體命令類.

總結

這次學習了三個模式