android隨筆之JAVA設(shè)計(jì)模式遵循的原則

在網(wǎng)上看了一些設(shè)計(jì)模式的文章后,感覺(jué)還是印象不太深刻,決定好好記錄記錄。

原文地址:http://blog.csdn.net/doymm2008/article/details/13288067

設(shè)計(jì)模式遵循的原則有6個(gè):

1、開(kāi)閉原則(Open Close Principle)

對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。

2、里氏代換原則(Liskov Substitution Principle)

  只有當(dāng)衍生類可以替換掉基類,軟件單位的功能不受到影響時(shí),基類才能真正被復(fù)用,而衍生類也能夠在基類的基礎(chǔ)上增加新的行為。

3、依賴倒轉(zhuǎn)原則(Dependence Inversion Principle)

這個(gè)是開(kāi)閉原則的基礎(chǔ),對(duì)接口編程,依賴于抽象而不依賴于具體。

4、接口隔離原則(Interface Segregation Principle)

  使用多個(gè)隔離的借口來(lái)降低耦合度。

5、迪米特法則(最少知道原則)(Demeter Principle)

  一個(gè)實(shí)體應(yīng)當(dāng)盡量少的與其他實(shí)體之間發(fā)生相互作用,使得系統(tǒng)功能模塊相對(duì)獨(dú)立。

6、合成復(fù)用原則(Composite Reuse Principle)

  原則是盡量使用合成/聚合的方式,而不是使用繼承。繼承實(shí)際上破壞了類的封裝性,超類的方法可能會(huì)被子類修改。

1. 工廠模式(Factory Method)

  常用的工廠模式是靜態(tài)工廠,利用static方法,作為一種類似于常見(jiàn)的工具類Utils等輔助效果,一般情況下工廠類不需要實(shí)例化。

2. 抽象工廠模式(Abstract Factory)

  一個(gè)基礎(chǔ)接口定義了功能,每個(gè)實(shí)現(xiàn)接口的子類就是產(chǎn)品,然后定義一個(gè)工廠接口,實(shí)現(xiàn)了工廠接口的就是工廠,這時(shí)候,接口編程的優(yōu)點(diǎn)就出現(xiàn)了,我們可以新增產(chǎn)品類(只需要實(shí)現(xiàn)產(chǎn)品接口),只需要同時(shí)新增一個(gè)工廠類,客戶端就可以輕松調(diào)用新產(chǎn)品的代碼。

  抽象工廠的靈活性就體現(xiàn)在這里,無(wú)需改動(dòng)原有的代碼,畢竟對(duì)于客戶端來(lái)說(shuō),靜態(tài)工廠模式在不改動(dòng)StaticFactory類的代碼時(shí)無(wú)法新增產(chǎn)品,如果采用了抽象工廠模式,就可以輕松的新增拓展類。

3. 單例模式(Singleton)

?  在內(nèi)部創(chuàng)建一個(gè)實(shí)例,構(gòu)造器全部設(shè)置為private,所有方法均在該實(shí)例上改動(dòng),在創(chuàng)建上要注意類的實(shí)例化只能執(zhí)行一次,可以采用許多種方法來(lái)實(shí)現(xiàn),如Synchronized關(guān)鍵字,或者利用內(nèi)部類等機(jī)制來(lái)實(shí)現(xiàn)。

4.建造者模式(Builder)

  在了解之前,先假設(shè)有一個(gè)問(wèn)題,我們需要?jiǎng)?chuàng)建一個(gè)學(xué)生對(duì)象,屬性有name,number,class,sex,age,school等屬性,如果每一個(gè)屬性都可以為空,也就是說(shuō)我們可以只用一個(gè)name,也可以用一個(gè)school,name,或者一個(gè)class,number,或者其他任意的賦值來(lái)創(chuàng)建一個(gè)學(xué)生對(duì)象,這時(shí)該怎么構(gòu)造?

5. 原型模式(Protype)

原型模式就是講一個(gè)對(duì)象作為原型,使用clone()方法來(lái)創(chuàng)建新的實(shí)例。

6.適配器模式(Adapter)

適配器模式的作用就是在原來(lái)的類上提供新功能。主要可分為3種:

類適配:創(chuàng)建新類,繼承源類,并實(shí)現(xiàn)新接口,例如

classadapterextendsoldClassimplementsnewFunc{}

對(duì)象適配:創(chuàng)建新類持源類的實(shí)例,并實(shí)現(xiàn)新接口,例如

classadapterimplementsnewFunc {privateoldClass oldInstance ;}

接口適配:創(chuàng)建新的抽象類實(shí)現(xiàn)舊接口方法。例如

abstractclassadapterimplementsoldClassFunc {voidnewFunc();}

7.裝飾模式(Decorator)

?給一類對(duì)象增加新的功能,裝飾方法與具體的內(nèi)部邏輯無(wú)關(guān)。

8.代理模式(Proxy)

客戶端通過(guò)代理類訪問(wèn),代理類實(shí)現(xiàn)具體的實(shí)現(xiàn)細(xì)節(jié),客戶只需要使用代理類即可實(shí)現(xiàn)操作。

這種模式可以對(duì)舊功能進(jìn)行代理,用一個(gè)代理類調(diào)用原有的方法,且對(duì)產(chǎn)生的結(jié)果進(jìn)行控制。

9.外觀模式(Facade)

為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,定義一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。這句話是百度百科的解釋,有點(diǎn)難懂,但是沒(méi)事,看下面的例子,我們?cè)趩?dòng)停止所有子系統(tǒng)的時(shí)候,為它們?cè)O(shè)計(jì)一個(gè)外觀類,這樣就可以實(shí)現(xiàn)統(tǒng)一的接口,這樣即使有新增的子系統(tǒng)subSystem4,也可以在不修改客戶端代碼的情況下輕松完成。

10.橋接模式(Bridge)

這里引用下http://www.runoob.com/design-pattern/bridge-pattern.html的例子。Circle類將DrwaApi與Shape類進(jìn)行了橋接

11.組合模式(Composite)

?組合模式是為了表示那些層次結(jié)構(gòu),同時(shí)部分和整體也可能是一樣的結(jié)構(gòu),常見(jiàn)的如文件夾或者樹(shù)。

12.享元模式(Flyweight)

使用共享對(duì)象的方法,用來(lái)盡可能減少內(nèi)存使用量以及分享資訊。通常使用工廠類輔助,例子中使用一個(gè)HashMap類進(jìn)行輔助判斷,數(shù)據(jù)池中是否已經(jīng)有了目標(biāo)實(shí)例,如果有,則直接返回,不需要多次創(chuàng)建重復(fù)實(shí)例。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。