二十三種設計模式
創(chuàng)建型:創(chuàng)建型模式,就是創(chuàng)建對象的模式,抽象了實例化的過程。
它幫助一個系統(tǒng)獨立于如何創(chuàng)建、組合和表示它的那些對象。
關注的是對象的創(chuàng)建,創(chuàng)建型模式將創(chuàng)建對象的過程進行了抽象,也可以理解為將創(chuàng)建對象的過程進行了封裝,作為客戶程序僅僅需要去使用對象,而不再關心創(chuàng)建對象過程中的邏輯。
創(chuàng)建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型:行為型模式是對在不同的對象之間劃分責任和算法的抽象化,行為型模式不僅僅關注類和對象的結構,而且重點關注他們之間的相互作用,通過行為型模式,可以更加清晰地劃分類與對象的職責,并研究系統(tǒng)在運行時實例對象之間的交互。
行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態(tài)模式、訪問者模式、中介者模式、解釋器模式。
行為型:結構型模式是為解決怎樣組裝現(xiàn)有的類,設計他們的交互方式,從而達到實現(xiàn)一定的功能。
結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
六大原則
一、開放封閉(簡稱開閉)原則
Open-Close Principle(OCP):一個軟件實體如類、模塊和函數(shù)應該對擴展開放,對修改關閉。目的就是保證程序的擴展性好,易于維護和升級。
開閉原則被稱為面向對象設計的基石,實際上,其他原則都可以看作是實現(xiàn)開閉原則的工具和手段。意思就是:軟件對擴展應該是開放的,對修改是封閉的,通俗來說就是,開發(fā)一個軟件時,應該對其進行功能擴展,而在進行這些擴展時,不需要對原來的程序進行修改。
好處是:軟件可用性非常靈活,擴展性強。需要新的功能時,可以增加新的模塊來滿足新需求。另外由于原來的模塊沒有修改,所以不用擔心穩(wěn)定性的問題。
二、單一職責原則
Single-Responsibilitiy Principle(SRP):對一個類而言,應該僅有一個引起它變化的原因。如果存在多于一個動機去改變一個類,那么這個類就具有多于一個的職責,就應該把多余的職責分離出去,再去創(chuàng)建一些類來完成每一個職責。
舉個例子:一個人身兼數(shù)職,而這些事情相關性不大,甚至有沖突,那他就無法很好的解決這些問題職責,應該分到不同的人身上去做。
單一職責原則是實現(xiàn)高內(nèi)聚低耦合的最好方法,沒有之一。
三、里氏代換原則
四、依賴倒置原則
五、接口隔離原則
接口隔離原則(Interface Segregation Principle):用于恰當?shù)膭澐纸巧徒涌冢哂袃煞N含義:1、用戶不應該依賴它不需要的借口;2、類間的依賴關系應該建立在最小的的接口上。
將這兩個定義概括為一句話:建立單一接口,代替龐大臃腫的接口。通俗來說就是:接口盡量細化,同時保證接口中的方法盡量的少。一個接口中包含太多的行為時,會導致它們與客戶端的不正常依賴關系,要做的就是分離接口,從而實現(xiàn)解耦。
回到上述的單一職責原則,要求行為分離接口接口細化,感覺有些相同。但實際上,單一職責原則要求類與接口的職責單一,注重的是職責,沒有要求接口盡量的少。
在接口隔離原則中,要求盡量使用多個專門的接口。專門的接口也就是提供給多個模塊的接口。提供給幾個模塊就應該有幾個接口,而不是建立一個臃腫龐大的接口,所有的模塊都可以訪問。
但是接口的設計是有限度的。接口的設計粒度越小系統(tǒng)越靈活,這是事實,但是接口太多這也就使得結構復雜,維護難度大。因此實際中,怎樣把握就靠開發(fā)的經(jīng)驗和常識了。
六、迪米特原則
Law of Demeter(最小知識原則):一個對象應該對其他對象有最少的了解。通俗來說就是,一個類對自己需要耦合或者調(diào)用的類知道的最少,你類內(nèi)部怎么復雜,我不管,那是你的事,我只知道你有那么多公用的方法,我能調(diào)用。
迪米特原則不希望類與類之間建立直接的接觸。如果真的需要有聯(lián)系,那么就通過它們的友元類來傳達。舉例來說:你需要買房子了,現(xiàn)在存在三座合適的樓盤A,B,C,但是你不必直接去樓盤買樓,而是在售樓處去了解情況。這樣就減少了你(購房者)與樓盤兩個類之間耦合。
但是應用迪米特原則很可能會造成一個后果:系統(tǒng)會存在大量的中介類,這些類(如上面的售樓處類)之所以存在是為了傳遞類之間的相互調(diào)用關系,這就一定會程度上增加了系統(tǒng)的復雜度。
迪米特原則核心觀念就是:類間解耦,弱耦合。