1. 程式人生 > >常用設計模式的小結和實際中的應用

常用設計模式的小結和實際中的應用

1.單例模式(Singleton): 保證一個類僅有一個例項,並提供一個訪問它的全域性控制點. 
比如在載入配置檔案時, 可使用該模式.

2.工廠模式(Factory): 定義一個用以建立物件的介面, 讓子類決定例項化哪個類. 
當遇到需要根據某個前提條件建立不同的類實現時, 會實用工廠模式. 

3.抽象工廠模式(Abstract Factory): 提供一個建立一系列相關或相互依賴物件的介面, 而無需指定它們具體的類. 

4.裝飾者模式(Decorator): 動態的給一個物件新增一些額外的職責. 
比如java.io包. BufferedInputStream封裝了FileInputStream, 它們都實現了InputStream介面, 但前者實現了readLine方法. 

5.代理模式(Proxy): 為其他物件提供一種代理以控制對這個物件的訪問. 
比如在使用者登入時, 真正的登入類和代理登入類都實現了Login介面, 不同的是Proxy類的方法中增加了使用者是否合法的判斷, 只有合法時才去呼叫真正登入類的login方法. 使用者訪問的其實是Proxy的login方法.

6.介面卡模式(Adapter): 將一個類的介面轉換成客戶希望的另一個介面. 

7.建造者模式(Builder): 將一個複雜物件的構建與它的表示分離. 

8.策略模式(Strategy): 定義了演算法家族, 分別封裝起來, 讓它們之間可以互相替換. 

比如Collections.sort(List list, Comparator c); 可以通過實現多個Comparator介面來達到多種排序的目的. 

9.模板模式(Template): 定義一個操作中的演算法骨架, 而將一些步驟延遲到子類中. 
比如HibernateTemplate, 在Template中已經定義了Connection開關的實現, 使用者只需要在子類中根據不同的業務寫不同的sql.

10.外觀模式(Facade): 為子系統中的一組介面提供一個一致的介面. 
一直在用, 比如DBUtil, 將所有資料庫物件封裝了, 只留了DBUtil.getDBUtil()這個介面. 

11.觀察者模式(Observer): 定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某一主題物件,在它的狀態發生變化時,會通知所有的觀察者. 
比如ServletContextListener, 在applcation啟動時, 會通知所有這個介面的實現類. 

12.命令模式(Command): 將一個請求封裝成為一個物件, 使可以用不同的請求對客戶進行引數化. 
比如Struts的MVC結構, 其實就是個Command模式.