最近重學設計模式,並且還有不少源碼要看。因此就想一箭雙鵰。從源碼中尋找設計模式。順便還能夠看看源碼。。。
本文只是尋找設計模式在java中的應用。優缺點就不細說了。並且也不可能將jdk中全部涉及設計模式的例子都舉出來。但願你們積極評論。來補全這一塊java
java.sql包
線程池sql
線程池中有線程建立工廠。應用了工廠模式數據庫
JAVA AWT 中的 LayoutManager
Comparator設計模式
在集合元素的比較中,能夠傳入一個comparer。不一樣的comparer有不一樣的比較策略mvc
java.io包jsp
裝飾者模式能夠動態地給一個對象增長其餘職責,就擴展對象功能來講,裝飾者模式比生成子類更爲靈活。在由InputStream,OutputStream,Reader和Writer表明的等級結構內部,有一些流處理器能夠對另外一些流處理器起到裝飾做用,造成新的,具備改善了的功能的流處理器。性能
jdk中的Proxy類ui
Proxy類能夠動態代理生成代理對象spa
java的clone方法線程
原型模式(Prototype Pattern)是用於建立重複的對象,同時又能保證性能
clone是基於內存級別的複製。不是用構造方法。建立重複對象性能更高
java.io.InputStream, java.io.OutputStream, java.io.Reader和java.io.Writer的全部非抽象方法
java.util.AbstractList, java.util.AbstractSet和java.util.AbstractMap的全部非抽象方法
父類實現關鍵步驟,子類實現了具體步驟
java.lang.Class
java的三層開發模式
Class.forName方法生成一個Class對象。做爲對對象操做的總入口。
java.lang.StringBuilder
java.lang.StringBuffer
StringBuilder和Stringbuffer能夠擴展原對象不一樣的字符串也能夠按不一樣的順序拼接
java.util.Observer接口
這個接口好像我平時開發沒用到。他的全部實現類都是在sun包的。
java.util.Iterator
根據一個指針的狀態而改變本身的行爲
java.util.Arrays.asList()
java.io.InputStreamReader(InputStream)
將一個類的接口轉換成客戶但願的另一個接口。適配器模式使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠一塊兒工做。
Arrays將集合轉換爲list。Inputstream轉換成reader
java.util.Map#putAll(Map)
java.util.List#addAll(Collection)
java.util.Set#addAll
組合模式用於把一組類似的對象看成一個單一的對象。和對象組合成集合一致
java.util.Iterator
java.util.Enumeration
提供一個一致的方法來順序訪問集合中的對象,這個方法與底層的集合的具體實現無關。
java.lang.Runtime
。。。。
private static Runtime currentRuntime = new Runtime(); public static Runtime getRuntime() { return currentRuntime;
java.sql.DrivenManager
經過上圖能夠看出,基於JDBC的應用程序,使用JDBC的API,至關因而對數據庫操做的抽象的擴展,算做橋接模式的抽象部分;而具體的接口實現是由驅動來完成的,驅動這邊天然就至關於橋接模式的實現部分了。而橋接的方式,再也不是讓抽象部分持有實現部分,而是採用了相似於工廠的作法,經過DriverManager來把抽象部分和實現部分對接起來,從而實現抽象部分和實現部分解耦
java.lang.Runable和線程池
Runnable:任務抽象,也就是「命令」;線程池經過submit,execute調用
jsp servlet 的 Filter
多個過濾器過濾,知足條件則跳轉入下一個過濾器
線程池的executer.execute方法
我以爲mvc模式可能更好理解
Controller做爲view和model的中介。使model和view透明化轉換
java.lang.String
享元模式嘗試重用現有的同類對象,若是未找到匹配的對象,則建立新對象。String的常量池正是如此
java.util.Pattern
java.text.Normalizer
java.text.Format
這個模式一般定義了一個語言的語法,而後解析相應語法的語句。簡單地說就是規定了格式
javax.lang.model.element.AnnotationValue和AnnotationValueVisitor
javax.lang.model.element.Element和ElementVisitor
javax.lang.model.type.TypeMirror和TypeVisitor
好像都沒用過。。。。之後補上
java.util.Collections#emptyList()
java.util.Collections#emptyMap()
java.util.Collections#emptySet()
一個空對象取代 NULL