設計模式的六大原則和三種類型

最近在看設計模式相關的知識,在此記錄並分享之。編程

設計模式總共23種。有六大原則和三種類型。

六大原則
1.單一職責原則---Single Responsibility Principle設計模式

定義:
    就一個類而言,應該僅有一個引發它變化的緣由。
說明:
    若是一個類承擔的職責過多,就等於把這些職責耦合在一塊兒。當業務愈來愈複雜時,改動一個地方就會引發整個函數的大改動。別人看你的代碼也會理解起來很費解。當你把每個函數的功能拆分的很是細緻的話,後期維護修改或者他們閱讀你的代碼都會很輕鬆。
2.裏式替換原則---LiskovSubstitution Principle
定義:
    子類型必須可以替換掉他們的父類型。
說明:
    若是把一個父類對象替換成一個子類對象,程序行爲徹底沒有變化,只有這樣,父類才能真正被複用,子類可以在父類的基礎上增長新的行爲。
    裏式替換原則是對開-閉原則的補充
3.依賴倒置原則---DependenceInversion Principle
定義:
    A.高層模塊不該該依賴低層模塊。兩個都應該依賴抽象;
    B.抽象不該該依賴細節,細節應該依賴抽象;(針對接口編程,而不是針對實現)
說明
    拋棄面向過程開發,減小各個模塊的耦合性,提升複用性
4.合成聚合原則---Composite/Aggregate Reuse Principle
定義:
    儘可能使用合成/聚合,儘可能不要使用類繼承
說明
    若是子類和父類有較強的耦合依賴關係,則父類的任何改變都會致使子類發生改變。複用子類時有需求而必須改變父類才能實現,這種狀況應當避免。
5.迪米特法則---Law Of Demeter
定義:
    若是兩個類沒必要彼此直接通訊,那麼這兩個類就不該當發生直接的相互做用,若是其中一個類須要調用另外一個類的某一個方法的話,能夠經過第三者轉發這個調用;
說明
    類之間的設計要鬆耦合,耦合性越低,複用性越高。
6.開放-封閉原則---Open Closed Principle
定義:
    軟件實體(類,模塊,函數等等)應該能夠擴展,可是不能夠修改;
說明
     對擴展開放,意味着有新的需求或變化時,能夠對現有代碼進行擴展,以適應新的狀況。
     對修改封閉,意味着類一旦設計完成,就能夠獨立完成其工做,而不要對類進行任何修改。
     這樣的設計,可以面對需求改變卻能夠保持相對穩定,從而使系統在第一個版本之後不斷推出新的版本;面對需求,對程序的改動是經過增長新的代碼進行的,而不是更改現有的代碼;
    開放封閉原則,是最爲重要的設計原則,Liskov替換原則和合成/聚合複用原則爲開放封閉原則的實現提供保證。

三種類型函數

建立型、結構型、行爲型。

1.建立型
建立型模式用來處理對象的建立過程,主要包含如下5種設計模式:ui

工廠方法模式(Factory Method Pattern)
抽象工廠模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
單例模式(Singleton Pattern)

2.結構型
結構型模式用來處理類或者對象的組合,主要包含如下7種設計模式:設計

適配器模式(Adapter Pattern)
橋接模式(Bridge Pattern)
組合模式(Composite Pattern)
裝飾者模式(Decorator Pattern)
外觀模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)

3.行爲型
行爲型模式用來對類或對象怎樣交互和怎樣分配職責進行描述,主要包含如下11種設計模式:代理

責任鏈模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解釋器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
備忘錄模式(Memento Pattern)
觀察者模式(Observer Pattern)
狀態模式(State Pattern)
策略模式(Strategy Pattern)
模板方法模式(Template Method Pattern)
訪問者模式(Visitor Pattern)

模式雖多,JavaScript中經常使用的有14種模式code

單例模式
策略模式
代理模式
迭代器模式
觀察者模式(發佈-訂閱模式)
命令模式
組合模式
模板方法模式
享元模式
職責鏈模式
中介者模式
裝飾器模式
狀態模式
適配器模式
相關文章
相關標籤/搜索