設(shè)計模式,不需要你創(chuàng)新,只需要強大的復(fù)制能力?。?!復(fù)制能力的建立是在你對問題的深入洞察以及對經(jīng)驗的深刻理解之上的。
何謂模式?
模式乃為解決某一類問題而設(shè)計的一套通用的解決方法。模式的出現(xiàn)也相當于是定義了一套標準,某類問題就直接按這套標準解決就行,而不用擔(dān)心千百種形式各異的解法。這在建筑方面或許不大利于創(chuàng)新,但在軟件工程界不知道為碼農(nóng)提供了多大的便利。描述模式的四個步驟:
1) 問題描述:描述該模式解決的問題是什么樣的;
2) 應(yīng)用場合:在什么環(huán)境(這個環(huán)境是指什么?)下使用該模式;
3) 設(shè)計方法:該模式是怎樣設(shè)計的;
4) 優(yōu)缺點:該模式的優(yōu)缺點是什么。設(shè)計模式的優(yōu)點:
1) 節(jié)省時間,不用你自己想設(shè)計方案,套用一個就好;
2) 方便溝通交流,只要懂設(shè)計模式,不管用什么語言,你都能輕松理解;
3) 易于擴展、復(fù)用和維護(我在想設(shè)計模式是怎么做到的?);面向?qū)ο蟮脑O(shè)計原則:
1) 單一功能原則:每個類的功能盡可能的簡單,盡可能向高內(nèi)聚低耦合靠攏;
2) 開閉原則:對修改封閉,對擴展開放;
3) 里約代替原則:在使用基類對象的地方都可以使用子類對象代替,該原則是實現(xiàn)開閉原則的重要依據(jù);
4) 控制反轉(zhuǎn)原則:在設(shè)計時,應(yīng)當針對抽象進行設(shè)計,而非針對具體實現(xiàn)進行設(shè)計。該原則是開閉原則的具體實現(xiàn)方式;
5) 接口隔離原則:在設(shè)計時,應(yīng)當將一個大接口依據(jù)單一職責(zé)原則分解成多個小接口,使各個小接口所具有的方法內(nèi)聚性更高;
6) 合成復(fù)用原則:將一個類的對象作為另一個類的屬性。在代碼重用的時候,如果使用繼承不能滿足里約代替原則,那么就盡可能使用合成復(fù)用;
7) 迪米特法則:一個類應(yīng)當與其他類盡可能的減少聯(lián)系。有必要的話可以引進第三方類來作為聯(lián)系紐帶。單例模式
在某些場合下,對于一個類,我們只能允許它的一個實例存在,在這種情況下,我們就可以使用單例模式。單例模式有兩種設(shè)計方法,分別稱為餓漢式和懶漢式。
1)餓漢式:其原理是在類中創(chuàng)建一個私有的靜態(tài)實例,同時提供一個返回靜態(tài)實例的公有靜態(tài)方法。在類加載的時候就會創(chuàng)建該類的實例,需要使用時直接調(diào)用公有方法即可。為什么叫餓漢式?可以這么理解:哎呀,我很餓啊,你趕緊給我拿吃的過來。所以就在類加載時就創(chuàng)建了。
2)懶漢式:在類中先創(chuàng)建一個值為空、類型為該類類型、的私有靜態(tài)變量,但并不創(chuàng)建對象。與此同時,提供一個公有的靜態(tài)方法,該方法判斷靜態(tài)變量是否為空,為空則使用同步方法創(chuàng)建該類的一個實例,并返回靜態(tài)變量。為什么叫懶漢式?你現(xiàn)在反正不要,我懶得現(xiàn)在就給你,你什么時候要我再給你。哈哈?。?!
這兩種模式最大的不同是一個在類加載時就創(chuàng)建了類的實例,一個在類加載后需要時才會創(chuàng)建。這兩種方法各有各的優(yōu)點。
1)餓漢式優(yōu)點:空間換取時間,比較適合經(jīng)常使用的情況,因為在類加載時就創(chuàng)建了實例,不像懶漢式還需要先進行判斷實例是否創(chuàng)建。
2)懶漢式優(yōu)點:時間換取空間,比較適合資源緊張,對象不怎么經(jīng)常使用的情況。