軟件設(shè)計(jì)原則
- 開閉原則:軟件實(shí)體應(yīng)當(dāng)對擴(kuò)展開放畏铆,對修改關(guān)閉
- 里氏替換原則:子類可以擴(kuò)展父類的功能,但不能改變父類原有的功能欢嘿。也就是說:子類繼承父類時(shí)晃跺,除添加新的方法完成新增功能外揩局,盡量不要重寫父類的方法。
- 依賴倒置原則:高層模塊不應(yīng)該依賴低層模塊掀虎,兩者都應(yīng)該依賴其抽象凌盯;抽象不應(yīng)該依賴細(xì)節(jié)付枫,細(xì)節(jié)應(yīng)該依賴抽象;其核心思想是:要面向接口編程驰怎,不要面向?qū)崿F(xiàn)編程阐滩。
- 單一職責(zé)原則:規(guī)定一個(gè)類應(yīng)該有且僅有一個(gè)引起它變化的原因,否則類應(yīng)該被拆分
- 接口隔離原則:要為各個(gè)類建立它們需要的專用接口县忌,而不要試圖去建立一個(gè)很龐大的接口供所有依賴它的類去調(diào)用
- 迪米特法則: 如果兩個(gè)軟件實(shí)體無須直接通信掂榔,那么就不應(yīng)當(dāng)發(fā)生直接的相互調(diào)用,可以通過第三方轉(zhuǎn)發(fā)該調(diào)用症杏。
- 合成復(fù)用原則:它要求在軟件復(fù)用時(shí)装获,要盡量先使用組合或者聚合等關(guān)聯(lián)關(guān)系來實(shí)現(xiàn),其次才考慮使用繼承關(guān)系來實(shí)現(xiàn)
創(chuàng)建型模式
- 單例(Singleton)模式:某個(gè)類只能生成一個(gè)實(shí)例厉颤,該類提供了一個(gè)全局訪問點(diǎn)供外部獲取該實(shí)例穴豫,其拓展是有限多例模式。
- 原型(Prototype)模式:將一個(gè)對象作為原型逼友,通過對其進(jìn)行復(fù)制而克隆出多個(gè)和原型類似的新實(shí)例精肃。
- 工廠方法(FactoryMethod)模式:定義一個(gè)用于創(chuàng)建產(chǎn)品的接口,由子類決定生產(chǎn)什么產(chǎn)品翁逞。
- 抽象工廠(AbstractFactory)模式:提供一個(gè)創(chuàng)建產(chǎn)品族的接口肋杖,其每個(gè)子類可以生產(chǎn)一系列相關(guān)的產(chǎn)品溉仑。
- 建造者(Builder)模式:將一個(gè)復(fù)雜對象分解成多個(gè)相對簡單的部分挖函,然后根據(jù)不同需要分別創(chuàng)建它們,最后構(gòu)建成該復(fù)雜對象浊竟。
結(jié)構(gòu)型模式
1.代理(Proxy)模式:為某對象提供一種代理以控制對該對象的訪問怨喘。即客戶端通過代理間接地訪問該對象,從而限制振定、增強(qiáng)或修改該對象的一些特性必怜。
2.適配器(Adapter)模式:將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口,使得原本由于接口不兼容而不能一起工作的那些類能一起工作后频。
3.橋接(Bridge)模式:將抽象與實(shí)現(xiàn)分離梳庆,使它們可以獨(dú)立變化。它是用組合關(guān)系代替繼承關(guān)系來實(shí)現(xiàn)的卑惜,從而降低了抽象和實(shí)現(xiàn)這兩個(gè)可變維度的耦合度膏执。
4.裝飾(Decorator)模式:動(dòng)態(tài)地給對象增加一些職責(zé),即增加其額外的功能露久。
5.外觀(Facade)模式:為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口更米,使這些子系統(tǒng)更加容易被訪問。
6.享元(Flyweight)模式:運(yùn)用共享技術(shù)來有效地支持大量細(xì)粒度對象的復(fù)用毫痕。
7.組合(Composite)模式:將對象組合成樹狀層次結(jié)構(gòu)征峦,使用戶對單個(gè)對象和組合對象具有一致的訪問性迟几。
行為型模式
- 模板方法(Template Method)模式:定義一個(gè)操作中的算法骨架,將算法的一些步驟延遲到子類中栏笆,使得子類在可以不改變該算法結(jié)構(gòu)的情況下重定義該算法的某些特定步驟类腮。
- 策略(Strategy)模式:定義了一系列算法,并將每個(gè)算法封裝起來蛉加,使它們可以相互替換存哲,且算法的改變不會(huì)影響使用算法的客戶。
- 命令(Command)模式:將一個(gè)請求封裝為一個(gè)對象七婴,使發(fā)出請求的責(zé)任和執(zhí)行請求的責(zé)任分割開祟偷。
- 職責(zé)鏈(Chain of Responsibility)模式:把請求從鏈中的一個(gè)對象傳到下一個(gè)對象,直到請求被響應(yīng)為止打厘。通過這種方式去除對象之間的耦合修肠。
- 狀態(tài)(State)模式:允許一個(gè)對象在其內(nèi)部狀態(tài)發(fā)生改變時(shí)改變其行為能力。
- 觀察者(Observer)模式:多個(gè)對象間存在一對多關(guān)系户盯,當(dāng)一個(gè)對象發(fā)生改變時(shí)嵌施,把這種改變通知給其他多個(gè)對象,從而影響其他對象的行為莽鸭。
- 中介者(Mediator)模式:定義一個(gè)中介對象來簡化原有對象之間的交互關(guān)系吗伤,降低系統(tǒng)中對象間的耦合度,使原有對象之間不必相互了解硫眨。
- 迭代器(Iterator)模式:提供一種方法來順序訪問聚合對象中的一系列數(shù)據(jù)足淆,而不暴露聚合對象的內(nèi)部表示。
- 訪問者(Visitor)模式:在不改變集合元素的前提下礁阁,為一個(gè)集合中的每個(gè)元素提供多種訪問方式巧号,即每個(gè)元素有多個(gè)訪問者對象訪問。
- 備忘錄(Memento)模式:在不破壞封裝性的前提下姥闭,獲取并保存一個(gè)對象的內(nèi)部狀態(tài)丹鸿,以便以后恢復(fù)它。
- 解釋器(Interpreter)模式:提供如何定義語言的文法棚品,以及對語言句子的解釋方法靠欢,即解釋器。
參考地址:軟件設(shè)計(jì)模式概述