設計模式分類 設計模式是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。主流的設計模式有23種,總體來說可以分為三大類 創建型模式(5) 工廠方法模式(Factory Pattern) 一種場景是希望工廠與產品的 ...
設計模式分類
設計模式是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。主流的設計模式有23種,總體來說可以分為三大類
創建型模式(5)
工廠方法模式(Factory Pattern)
一種場景是希望工廠與產品的種類對客戶端保持透明,給客戶端提供一致的操作,另外一種是不同的工廠和產品可以提供客戶端不同的服務或功能抽象工廠模式(Abstract Factory Pattern)
需要一個介面可以提供一個產品族,且不必知道產品的具體種類單例模式(Singleton Pattern)
應用中有對象需要是全局的且唯一建造者模式(Builder Pattern)
需要構建一批構建過程相同但表示不同的產品,而構建過程非常複雜原型模式(Prototype Pattern)
需要在運行時動態的創建指定實例種類的對象,或是需要復用其狀態
結構型模式(7)
適配器模式(Adapter Pattern)
需要使用一個類的功能,但是該類的介面不符合使用場合要求的介面,可使用定製適配器,又或者是有一個介面定義的行為過多,則可以定義一個預設適配器,讓子類選擇性的覆蓋適配器的方法裝飾器模式(Decorator Pattern)
一個類需要動態的添加功能,且這些功能可以相互疊加代理模式(Proxy Pattern)
需要修改或屏蔽某一個或若幹個類的部分功能,復用另外一部分功能,可使用靜態代理,若是需要攔截一批類中的某些方法,在方法的前後插入一些一致的操作,假設這些類有一致的介面,可使用JDK的動態代理,否則可使用cglib外觀模式(Facade Pattern)
一個子系統需要對外提供服務橋接模式(Bridge Pattern)
一個對象有多個維度的變化,需要將這些維度抽離出來,讓其獨立變化組合模式(Composite Pattern)
當有一個結構可以組合成樹形結構,且需要向客戶端提供一致的操作介面,使得客戶端操作忽略簡單元素與複雜元素享元模式(Flyweight Pattern)
一些狀態相同的對象被大量的重覆使用
行為型模式(11)
策略模式(Strategy Pattern)
遵循單一職責、依賴倒置、迪米特、開閉原則模板方法模式(Template Pattern)
一批子類的功能有可提取的公共演算法骨架觀察者模式(Observer Pattern)
需要將觀察者與被觀察者解耦或者是觀察者的種類不確定迭代子模式(Iterator Pattern)
需要迭代訪問一個聚合對象中的各個元素,且不暴露該聚合對象內部的表示責任鏈模式(Chain of Responsibility Pattern)
一個請求的處理需要多個對象當中的一個或幾個協作處理命令模式(Command Pattern)
行為的請求者與行為的處理者耦合度過高備忘錄模式(Memento Pattern)
需要在對象的外部保存該對象的內部狀態狀態模式(State Pattern)
一個對象在多個狀態下行為不同,且這些狀態可互相轉換訪問者模式(Visitor Pattern)
作用於一個數據結構之上的操作經常變化中介者模式(Mediator Pattern)
一個系列的對象交互關係十分複雜解釋器模式(Interpreter Pattern)
有一種語言被頻繁的使用
設計模式的六大原則
開閉原則(Open Close Principle)
開閉原則就是說對擴展開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的代碼,實現一個熱插拔的效果。所以一句話概括就是:為了使程式的擴展性好,易於維護和升級。想要達到這樣的效果,我們需要使用介面和抽象類,後面的具體設計中我們會提到這點。
里氏代換原則(Liskov Substitution Principle)
里氏代換原則(Liskov Substitution Principle LSP)面向對象設計的基本原則之一。 里氏代換原則中說,任何基類可以出現的地方,子類一定可以出現。 LSP是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被覆用,而衍生類也能夠在基類的基礎上增加新的行為。里氏代換原則是對“開-閉”原則的補充。實現“開-閉”原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體實現,所以里氏代換原則是對實現抽象化的具體步驟的規範。—— From Baidu 百科
依賴倒轉原則(Dependence Inversion Principle)
這個是開閉原則的基礎,具體內容:真對介面編程,依賴於抽象而不依賴於具體。
介面隔離原則(Interface Segregation Principle)
這個原則的意思是:使用多個隔離的介面,比使用單個介面要好。還是一個降低類之間的耦合度的意思,從這兒我們看出,其實設計模式就是一個軟體的設計思想,從大型軟體架構出發,為了升級和維護方便。所以上文中多次出現:降低依賴,降低耦合。
迪米特法則(最少知道原則)(Demeter Principle)
為什麼叫最少知道原則,就是說:一個實體應當儘量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。
合成復用原則(Composite Reuse Principle)
原則是儘量使用合成/聚合的方式,而不是使用繼承。