from://http://www.eoeandroid.com/thread-313702-1-1.html
經過幾天時間的努力,整理,設計模式的demo和資料基本整理完成,首先聲明,這些資料部分從網上找的,還有部分是用了<<java與模式>>書中的例子,里面的模式也是照着這書上的划分的,很不錯的一本書,想學習設計模式的同學可以看看。先說說我的體會,每次看設計模式,總會有新的體會,這是第三次我復習復習這方面的知識了,感覺還不錯,但是時間久了估計還是會忘,所以最好的辦法還是找個例子,忘得時候看看怎么用就行了,我的demo把27種設計模式進行了合並,不同的模式例子,分放在不同的文件中。資料總共有一下27種模式: 設計模式主要分三個類型:創建型、結構型和行為型。 其中創建型有: 一、Singleton,單例模式:保證一個類只有一個實例,並提供一個訪問它的全局訪問點 二、Abstract Factory,抽象工廠:提供一個創建一系列相關或相互依賴對象的接口,而無須指定它們的具體類。 三、Factory Method,工廠方法:定義一個用於創建對象的接口,讓子類決定實例化哪一個類,Factory Method使一個類的實例化延遲到了子類。 四、Builder,建造模式:將一個復雜對象的構建與他的表示相分離,使得同樣的構建過程可以創建不同的表示。 五、Prototype,原型模式:用原型實例指定創建對象的種類,並且通過拷貝這些原型來創建新的對象。 行為型有: 六、Iterator,迭代器模式:提供一個方法順序訪問一個聚合對象的各個元素,而又不需要暴露該對象的內部表示。 七、Observer,觀察者模式:定義對象間一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知自動更新。 八、Template Method,模板方法:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中,TemplateMethod使得子類可以不改變一個算法的結構即可以重定義該算法得某些特定步驟。 九、Command,命令模式:將一個請求封裝為一個對象,從而使你可以用不同的請求對客戶進行參數化,對請求排隊和記錄請求日志,以及支持可撤銷的操作。 十、State,狀態模式:允許對象在其內部狀態改變時改變他的行為。對象看起來似乎改變了他的類。 十一、Strategy,策略模式:定義一系列的算法,把他們一個個封裝起來,並使他們可以互相替換,本模式使得算法可以獨立於使用它們的客戶。 十二、Chain of Responsibility,職責鏈模式:使多個對象都有機會處理請求,從而避免請求的送發者和接收者之間的耦合關系 十三、Mediator,中介者模式:用一個中介對象封裝一些列的對象交互。 十四、Visitor,訪問者模式:表示一個作用於某對象結構中的各元素的操作,它使你可以在不改變各元素類的前提下定義作用於這個元素的新操作。 十五、Interpreter,解釋器模式:給定一個語言,定義他的文法的一個表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。 十六、Memento,備忘錄模式:在不破壞對象的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。 結構型有: 十七、Composite,組合模式:將對象組合成樹形結構以表示部分整體的關系,Composite使得用戶對單個對象和組合對象的使用具有一致性。 十八、Facade,外觀模式:為子系統中的一組接口提供一致的界面,fa?ade提供了一高層接口,這個接口使得子系統更容易使用。 十九、Proxy,代理模式:為其他對象提供一種代理以控制對這個對象的訪問 二十、Adapter,適配器模式:將一類的接口轉換成客戶希望的另外一個接口,Adapter模式使得原本由於接口不兼容而不能一起工作那些類可以一起工作。 二十一、Decrator,裝飾模式:動態地給一個對象增加一些額外的職責,就增加的功能來說,Decorator模式相比生成子類更加靈活。 二十二、Bridge,橋模式:將抽象部分與它的實現部分相分離,使他們可以獨立的變化。 二十三、Flyweight,享元模式除了以上23個模式之外,根據<<java與模式>>中的分類,還有4種模式,DefaultAdapter 缺省適配器模式,SimpleFactory 簡單工廠模式,Multiton 多例模式, Immutable 不變模式下面我來說說怎么閱讀每個模式,每個文件中的Test.java是該模式的測試類,上面的注解詳細描述了該模式的具體介紹和優缺點等等,該包中的其他文件就是一些接口或抽象類等該模式所需要的類,要理解每個模式的思想,要把該包中的幾個聯系着一起看,為了避免太亂,就分開寫了。
下面上傳幾段代碼:代理模式的代碼:
01 |
package com.kunhong.design.Proxy; |
04 |
* 代理模式 代理模式:給某一對象提供代理對象,並由代理對象控制具體對象的引用. |
06 |
* 代理,指的就是一個角色代表另一個角色采取行動,就象生活中,一個紅酒廠商,是不會直接把紅酒零售客戶的,都是通過代理來完成他的銷售業務的.而客戶, |
07 |
* 也不用為了喝紅酒而到處找工廠,他只要找到廠商在當地的代理就行了,具體紅酒工廠在那里,客戶不用關心,代理會幫他處理. |
13 |
public static void main(String agr[]) { |
14 |
SellInterface sell = new RedWineProxy(); |
觀察者模式的代碼:
01 |
package com.kunhong.design.Observer; |
08 |
public interface AbstractWatched { |
11 |
public void addAbstactWatcher(AbstractWatcher watcher); |
14 |
public void removeAbstactWatcher(AbstractWatcher watcher); |
17 |
public void removeAll(); |
20 |
public void notifyWatchers(); |
好了,要想知道更多的代碼,都在附近里了,希望能幫助更多的人了解設計模式,設計模式的最大就是可以減少代碼的耦合度,使代碼獨立性,模塊性更強,覺得不錯的話,給個回復,不枉費我的辛苦整理啊 不好意思,剛剛代碼上傳發現里面有些涉及隱私信息忘刪除了,晚些時候處理一下馬上給出代碼,真是不好意思!! 代碼上傳完畢,轉載請注明出處!!
最近看了<<設計模式之禪>>,也是很不錯的一本書,准備再次更新源代碼,這次增加了各大模式的通用模式,也就是下面的一個general目錄下的文件,從原理上更加理解設計模式的精髓,目前更新其中的12套模式,喜歡的就頂!!!讓更多的人知道設計模式的存在!!!! |