本文轉載自 http://www.mynawang.com/ 相關代碼可訪問 https://github.com/mynawang/Design-Pattern-Learning 什麼是設計模式 設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的 ...
本文轉載自
http://www.mynawang.com/
相關代碼可訪問
https://github.com/mynawang/Design-Pattern-Learning
什麼是設計模式
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。設計模式的6個原則
1、迪米特法原則(Demeter Principle) 迪米特法原則又稱為最少知道原則,也就是說,一個實體應當儘量少的與其他實體之間發生相互作用,使得系統功能模塊相對獨立。也就是我們平常所說的”高內聚,低耦合”。 2、單一職責原則(Single Responsibility Principle) 就一個類而言,應該僅有一個引起它變化的原因。簡而言之,就是功能要單一,一個類只負責一項職責。 3、介面隔離原則(Interface Segregation Principle) 使用多個專門的介面,而不使用單一的總介面,即客戶端不應該依賴那些它不需要的介面。 4、里氏替換原則(Liskov Substitution Principle) 所有引用基類(父類)的地方必須能透明地使用其子類的對象。即繼承於派生的規則。 5、依賴倒置原則(Dependence Inversion Principle) 高層模塊不應該依賴低層模塊,二者都應該依賴其抽象;抽象不應該依賴於細節,細節應當依賴於抽象。換言之,要針對介面編程,而不是針對實現編程。 6、開閉原則(Open-Closed Principle) 一個軟體實體如類、模塊和函數應該對擴展開放,對修改關閉。即軟體實體應儘量在不修改原有代碼的情況下進行擴展。設計模式分類
創建型模式
1、抽象工廠模式(Abstract Factory Pattern) 提供一個介面, 用於創建相關或依賴對象的家族, 而不需要指定具體類。 2、工廠方法模式(Factory Method Pattern) 定義了一個創建對象的介面,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。 3、建造者模式(Builder Pattern) 將一個複雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。 4、單例模式(Singleton Pattern) 確保一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。 5、原型模式(Prototype Pattern) 用原型實例指定創建對象的種類,並通過拷貝這些原型創建新的對象。結構型模式
1、適配器模式(Adapter Pattern) 是作為兩個不相容的介面之間的橋梁。它結合了兩個獨立介面的功能。 2、裝飾器模式(Decorator Pattern) 允許向一個現有的對象添加新的功能,同時又不改變其結構。它是作為現有的類的一個包裝。 3、代理模式(Proxy Pattern) 一個類代表另一個類的功能。創建具有現有對象的對象,以便向外界提供功能介面。 4、橋接模式(Bridge Pattern) 用於把抽象化與實現化解耦,使得二者可以獨立變化。通過提供抽象化和實現化之間的橋接結構,來實現二者的解耦。 5、外觀模式(Facade Pattern) 隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。向現有的系統添加一個介面,來隱藏系統的複雜性。 6、享元模式(Flyweight Pattern) 主要用於減少創建對象的數量,以減少記憶體占用和提高性能。通過共用技術實現相同或相似對象的重用。 7、組合模式(Composite Pattern) 又叫部分-整體模式,是用於把一組相似的對象當作一個單一的對象。將對象組織到樹結構中,可以用來描述整體與部分的關係。行為型模式
1、模板方法模式(Template Method Pattern) 一個抽象類公開定義了執行它的方法的方式/模板。它的子類可以按需要重寫方法實現,但調用將以抽象類中定義的方式進行。 2、備忘錄模式(Memento Pattern) 保存一個對象的某個狀態,以便在適當的時候恢復對象。 3、迭代子模式(Iterator Pattern) 用於順序訪問集合對象的元素,不需要知道集合對象的底層表示。 4、訪問者模式(Visitor Pattern) 表示一個作用於某對象結構中的各元素的操作,它使我們可以在不改變各元素的類的前提下定義作用於這些元素的新操作。 5、觀察者模式(Observer Pattern) 定義對象間的一種一對多依賴關係,使得每當一個對象狀態發生改變時,其相關依賴對象皆得到通知並被自動更新。 6、解釋器模式(Interpreter Pattern) 定義語言的文法,並且建立一個解釋器來解釋該語言中的句子,這裡的“語言”意思是使用規定格式和語法的代碼。 7、中介者模式(Mediator Pattern) 用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變它們之間的交互。中介者模式又稱為調停者模式。 8、責任鏈模式(Chain of Responsibility Pattern) 避免請求發送者與接收者耦合在一起,讓多個對象都有可能接收請求,將這些對象連接成一條鏈,並且沿著這條鏈傳遞請求,直到有對象處理它為止。 9、策略模式(Strategy Pattern) 定義一系列演算法,將每一個演算法封裝起來,並讓它們可以相互替換。策略模式讓演算法獨立於使用它的客戶而變化。 10、命令模式(Command Pattern) 將一個請求封裝為一個對象,從而使我們可用不同的請求對客戶進行參數化;對請求排隊或者記錄請求日誌,以及支持可撤銷的操作。 11、狀態模式(State Pattern) 允許一個對象在其內部狀態改變時改變它的行為,對象看起來似乎修改了它的類。 博主自白本人20有餘,天資愚鈍,深信勤能補拙。酷愛編程,愛鑽研,廣交碼友,耕於三線,日以繼夜而使飛燕之身蛻變為大腹便便。
有志之士點擊鏈接加入技術交流群【專註的程式猿】282087535
文章如果對你有所幫助是我的榮幸,不妥之處希望指正,轉帖請註明本文出自鈺火的小棧(http://www.mynawang.com/),請尊重他人的辛勤勞動成果,謝謝!