二十三種設(shè)計(jì)模式
創(chuàng)建型:創(chuàng)建型模式爱榕,就是創(chuàng)建對(duì)象的模式弃舒,抽象了實(shí)例化的過程。
它幫助一個(gè)系統(tǒng)獨(dú)立于如何創(chuàng)建鸽粉、組合和表示它的那些對(duì)象斜脂。
關(guān)注的是對(duì)象的創(chuàng)建,創(chuàng)建型模式將創(chuàng)建對(duì)象的過程進(jìn)行了抽象触机,也可以理解為將創(chuàng)建對(duì)象的過程進(jìn)行了封裝秽褒,作為客戶程序僅僅需要去使用對(duì)象,而不再關(guān)心創(chuàng)建對(duì)象過程中的邏輯威兜。
創(chuàng)建型模式销斟,共五種:工廠方法模式、抽象工廠模式椒舵、單例模式蚂踊、建造者模式、原型模式笔宿。
結(jié)構(gòu)型:行為型模式是對(duì)在不同的對(duì)象之間劃分責(zé)任和算法的抽象化犁钟,行為型模式不僅僅關(guān)注類和對(duì)象的結(jié)構(gòu),而且重點(diǎn)關(guān)注他們之間的相互作用泼橘,通過行為型模式涝动,可以更加清晰地劃分類與對(duì)象的職責(zé),并研究系統(tǒng)在運(yùn)行時(shí)實(shí)例對(duì)象之間的交互炬灭。
行為型模式醋粟,共十一種:策略模式、模板方法模式重归、觀察者模式米愿、迭代子模式、責(zé)任鏈模式鼻吮、命令模式育苟、備忘錄模式、狀態(tài)模式椎木、訪問者模式违柏、中介者模式、解釋器模式香椎。
行為型:結(jié)構(gòu)型模式是為解決怎樣組裝現(xiàn)有的類漱竖,設(shè)計(jì)他們的交互方式,從而達(dá)到實(shí)現(xiàn)一定的功能士鸥。
結(jié)構(gòu)型模式闲孤,共七種:適配器模式、裝飾器模式、代理模式讼积、外觀模式肥照、橋接模式、組合模式勤众、享元模式舆绎。
六大原則
一、開放封閉(簡(jiǎn)稱開閉)原則
Open-Close Principle(OCP):一個(gè)軟件實(shí)體如類们颜、模塊和函數(shù)應(yīng)該對(duì)擴(kuò)展開放吕朵,對(duì)修改關(guān)閉。目的就是保證程序的擴(kuò)展性好窥突,易于維護(hù)和升級(jí)努溃。
開閉原則被稱為面向?qū)ο笤O(shè)計(jì)的基石,實(shí)際上阻问,其他原則都可以看作是實(shí)現(xiàn)開閉原則的工具和手段梧税。意思就是:軟件對(duì)擴(kuò)展應(yīng)該是開放的,對(duì)修改是封閉的称近,通俗來說就是第队,開發(fā)一個(gè)軟件時(shí),應(yīng)該對(duì)其進(jìn)行功能擴(kuò)展刨秆,而在進(jìn)行這些擴(kuò)展時(shí)凳谦,不需要對(duì)原來的程序進(jìn)行修改。
好處是:軟件可用性非常靈活衡未,擴(kuò)展性強(qiáng)尸执。需要新的功能時(shí),可以增加新的模塊來滿足新需求眠屎。另外由于原來的模塊沒有修改剔交,所以不用擔(dān)心穩(wěn)定性的問題肆饶。
二改衩、單一職責(zé)原則
Single-Responsibilitiy Principle(SRP):對(duì)一個(gè)類而言,應(yīng)該僅有一個(gè)引起它變化的原因驯镊。如果存在多于一個(gè)動(dòng)機(jī)去改變一個(gè)類葫督,那么這個(gè)類就具有多于一個(gè)的職責(zé),就應(yīng)該把多余的職責(zé)分離出去板惑,再去創(chuàng)建一些類來完成每一個(gè)職責(zé)橄镜。
舉個(gè)例子:一個(gè)人身兼數(shù)職,而這些事情相關(guān)性不大冯乘,甚至有沖突洽胶,那他就無(wú)法很好的解決這些問題職責(zé),應(yīng)該分到不同的人身上去做裆馒。
單一職責(zé)原則是實(shí)現(xiàn)高內(nèi)聚低耦合的最好方法姊氓,沒有之一丐怯。
三、里氏代換原則
四翔横、依賴倒置原則
五读跷、接口隔離原則
接口隔離原則(Interface Segregation Principle):用于恰當(dāng)?shù)膭澐纸巧徒涌冢哂袃煞N含義:1禾唁、用戶不應(yīng)該依賴它不需要的借口效览;2、類間的依賴關(guān)系應(yīng)該建立在最小的的接口上荡短。
將這兩個(gè)定義概括為一句話:建立單一接口丐枉,代替龐大臃腫的接口。通俗來說就是:接口盡量細(xì)化掘托,同時(shí)保證接口中的方法盡量的少矛洞。一個(gè)接口中包含太多的行為時(shí),會(huì)導(dǎo)致它們與客戶端的不正常依賴關(guān)系烫映,要做的就是分離接口沼本,從而實(shí)現(xiàn)解耦。
回到上述的單一職責(zé)原則锭沟,要求行為分離接口接口細(xì)化抽兆,感覺有些相同。但實(shí)際上族淮,單一職責(zé)原則要求類與接口的職責(zé)單一辫红,注重的是職責(zé),沒有要求接口盡量的少祝辣。
在接口隔離原則中贴妻,要求盡量使用多個(gè)專門的接口。專門的接口也就是提供給多個(gè)模塊的接口蝙斜。提供給幾個(gè)模塊就應(yīng)該有幾個(gè)接口名惩,而不是建立一個(gè)臃腫龐大的接口,所有的模塊都可以訪問孕荠。
但是接口的設(shè)計(jì)是有限度的娩鹉。接口的設(shè)計(jì)粒度越小系統(tǒng)越靈活,這是事實(shí)稚伍,但是接口太多這也就使得結(jié)構(gòu)復(fù)雜弯予,維護(hù)難度大。因此實(shí)際中个曙,怎樣把握就靠開發(fā)的經(jīng)驗(yàn)和常識(shí)了锈嫩。
六、迪米特原則
Law of Demeter(最小知識(shí)原則):一個(gè)對(duì)象應(yīng)該對(duì)其他對(duì)象有最少的了解。通俗來說就是呼寸,一個(gè)類對(duì)自己需要耦合或者調(diào)用的類知道的最少那槽,你類內(nèi)部怎么復(fù)雜,我不管等舔,那是你的事骚灸,我只知道你有那么多公用的方法,我能調(diào)用慌植。
迪米特原則不希望類與類之間建立直接的接觸甚牲。如果真的需要有聯(lián)系,那么就通過它們的友元類來傳達(dá)蝶柿。舉例來說:你需要買房子了丈钙,現(xiàn)在存在三座合適的樓盤A,B交汤,C雏赦,但是你不必直接去樓盤買樓,而是在售樓處去了解情況芙扎。這樣就減少了你(購(gòu)房者)與樓盤兩個(gè)類之間耦合星岗。
但是應(yīng)用迪米特原則很可能會(huì)造成一個(gè)后果:系統(tǒng)會(huì)存在大量的中介類,這些類(如上面的售樓處類)之所以存在是為了傳遞類之間的相互調(diào)用關(guān)系戒洼,這就一定會(huì)程度上增加了系統(tǒng)的復(fù)雜度俏橘。
迪米特原則核心觀念就是:類間解耦,弱耦合圈浇。