設計模式的六大原則和三種類型
最近在看設計模式相關的知識,在此記錄並分享之。
設計模式總共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種設計模式:
工廠方法模式(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種模式
單例模式 策略模式 代理模式 迭代器模式 觀察者模式(釋出-訂閱模式) 命令模式 組合模式 模板方法模式 享元模式 職責鏈模式 中介者模式 裝飾器模式 狀態模式 介面卡模式