在網(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í)例。