建立型模式(5):工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式。java
結構型模式(7):橋接模式、裝飾者模式、代理模式、適配器模式、組合模式、外觀模式、享元模式。算法
行爲型模式(11):策略模式、觀察者模式、模板方法、命令模式、狀態模式、職責鏈模式、解釋器模式、中介者模式、訪問者模式、備忘錄模式、迭代器模式。數據庫
一、單一職責原則編程
一個類只負責一個功能領域中的相應職責。 設計模式
二、開閉原則spa
一個實體對擴展開放,對修改關閉。即軟件實體應儘可能在不修改原有代碼的狀況下進行擴展。線程
三、里氏代換原則設計
任何基類能夠出現的地方,子類必定能夠出現。代理
四、依賴倒置原則日誌
抽象不該該依賴於細節,細節應當依賴於抽象。換言之,要針對接口編程,而不是針對實現編程。
五、接口隔離原則
使用多個專門的接口,而不使用單一的總接口。
六、迪米特法則(最少知道原則)
一個實體應當可能少地與其餘實體發生相互做用,使得系統功能模塊相對獨立。
應用:
1. java.lang.Runtime;
2. 日誌文件
3. 配置文件
4. 打印機
5. 回收站
6. 任務管理器
7. 數據庫鏈接池
8. 線程池
(簡單工廠模式:又叫靜態工廠方法模式,它定義一個具體的工廠類負責建立一些類的實例)
應用:
1. Collection中的iterator方法;
2. java.lang.Proxy#newProxyInstance()
3. java.lang.Object#toString()
4. java.lang.Class#newInstance()
5. java.lang.reflect.Array#newInstance()
6. java.lang.reflect.Constructor#newInstance()
7. java.lang.Boolean#valueOf(String)
8. java.lang.Class#forName()
橋接模式:將抽象部分與實現部分分離,使它們均可以獨立的變化。
應用:
1. Collections類中的sort()方法;
2. JDBC數據庫訪問接口API;
裝飾者模式:對已有的業務邏輯進一步的封裝,使其增長額外的功能。即向一個現有的對象添加新的功能,同時又不改變其結構。
應用:
1. Java I/O使用裝飾模式設計
代理模式:一個類代理另外一個類的功能。
應用:
1. java.lang.reflect 包中的Proxy類和InvocationHandler 接口提供了生成動態代理類的能力。
2. 遠程代理
適配器模式:將一個類的接口轉換成客戶但願的另一個接口。Adapter模式使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠在一塊兒工做。
應用:
1. java.io.InputStreamReader(InputStream)
2. java.io.OutputStreamWriter(OutputStream)
策略模式:將多個算法封裝到具備共同接口的獨立的類中,從而使得它們能夠相互替換。
應用:
1. java.util.Comparator#compare()
2. javax.servlet.http.HttpServlet
3. javax.servlet.Filter#doFilter()
4. TreeSet的排序功能
5. TreeMap的排序功能
觀察者模式(發佈-訂閱模式):定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知全部觀察者對象,讓它們可以自動更新本身。
應用:
1. Observable類和Observer接口
模板方法模式:定義一個算法的骨架,而將具體的算法延遲到子類中來實現
應用:
1. AbstractClass抽象類裏面的TemplateMethod()