1. 程式人生 > >23中設計模式概括及六種設計原則(一)

23中設計模式概括及六種設計原則(一)

一、設計模式分類

總體來說模式依據目的可分為建立型模式(Creational)、結構型模式(Structural)、行為型模式(Behavioral)三種。

建立型模式:處理物件的建立。共5種:工廠方法模式(Factory Method)、抽象工廠模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)、單例模式(Singleton)。

結構型模式:處理類或物件的組合。共7種:介面卡模式(Adapter)、橋接模式(Bridge)、組合模式(Composite)、裝飾器模式(Decorator)、外觀模式(Facade)、享元模式(Flyweight)、代理模式(Proxy)。

行為型模式:對類或物件怎樣互動怎樣分配職責進行描述。共11種:直譯器模式(Interpretor)、模板方法模式(Template Method)、責任鏈模式(Chain of Responsibility)、命令模式(Command)、迭代子模式(Iterator)、中介者模式(Mediator)、備忘錄模式(Memento)、觀察者模式(Observer)、狀態模式(State)、策略模式(Strategy)、訪問者模式(Visitor)。

它們之間存在以下的關係:

 二、六大設計原則

1、單一職責原則(Single Responsibility Principle, SRP)

一個類只負責一個功能領域中的相應職責,或者可以定義為:就一個類而言,應該只有一個引起它變化的原因。

建議:介面一定要做到單一職責,類的設計儘量做到只有一個原因引起變化。

2、里氏替換原則(Liskov Substitution Principle, LSP)

所有引用基類(父類)的地方必須能透明地使用其子類的物件。

解釋:只要父類能出現的地方子類就可以出現,而且替換成子類頁不會產生任何異常或錯誤,使用者可能根本就不需要知道是子類還是父類。但是,反過來就不行了,有子類出現的地方,父類未必就能適應。

3、依賴倒置原則(Dependency Inversion  Principle, DIP)

抽象不應該依賴於細節,細節應當依賴於抽象。換言之,要針對介面程式設計,而不是針對實現程式設計。

4、介面隔離原則(Interface  Segregation Principle, ISP)

使用多個專門的介面,而不使用單一的總介面,即客戶端不應該依賴那些它不需要的介面。

每一個介面應該承擔一種相對獨立的角色,不幹不該乾的事,該乾的事都要幹。

5、迪米特法則(Law of  Demeter, LoD)

一個軟體實體應當儘可能少地與其他實體發生相互作用。

注意:在類的劃分上,應當儘量建立鬆耦合的類,類之間的耦合度越低,就越有利於複用,一個處在鬆耦合中的類一旦被修改,不會對關聯的類造成太大波及;在類的結構設計上,每一個類都應當儘量降低其成員變數和成員函式的訪問許可權;在類的設計上,只要有可能,一個型別應當設計成不變類;在對其他類的引用上,一個物件對其他物件的引用應當降到最低。

6、開閉原則(Open-Closed Principle, OCP)

一個軟體實體應當對擴充套件開放,對修改關閉。即軟體實體應儘量在不修改原有程式碼的情況下進行擴充套件。