設計模式在jdk中的應用

前言

最近重學設計模式,並且還有不少源碼要看。因此就想一箭雙鵰。從源碼中尋找設計模式。順便還能夠看看源碼。。。
本文只是尋找設計模式在java中的應用。優缺點就不細說了。並且也不可能將jdk中全部涉及設計模式的例子都舉出來。但願你們積極評論。來補全這一塊java

工廠模式

jdk中的應用

java.sql包
線程池sql

解釋和代碼

線程池中有線程建立工廠。應用了工廠模式數據庫

策略模式

jdk中的應用

JAVA AWT 中的 LayoutManager
Comparator設計模式

解釋和代碼

在集合元素的比較中,能夠傳入一個comparer。不一樣的comparer有不一樣的比較策略mvc

裝飾者模式

jdk中的應用

java.io包jsp

解釋和代碼

裝飾者模式能夠動態地給一個對象增長其餘職責,就擴展對象功能來講,裝飾者模式比生成子類更爲靈活。在由InputStream,OutputStream,Reader和Writer表明的等級結構內部,有一些流處理器能夠對另外一些流處理器起到裝飾做用,造成新的,具備改善了的功能的流處理器。性能

代理模式

jdk中的應用

jdk中的Proxy類ui

解釋和代碼

Proxy類能夠動態代理生成代理對象spa

原型模式

jdk中的應用

java的clone方法線程

解釋和代碼

原型模式(Prototype Pattern)是用於建立重複的對象,同時又能保證性能
clone是基於內存級別的複製。不是用構造方法。建立重複對象性能更高

模板模式

jdk中的應用

java.io.InputStream, java.io.OutputStream, java.io.Reader和java.io.Writer的全部非抽象方法
java.util.AbstractList, java.util.AbstractSet和java.util.AbstractMap的全部非抽象方法

解釋和代碼

父類實現關鍵步驟,子類實現了具體步驟

外觀模式

jdk中的應用

java.lang.Class
java的三層開發模式

解釋和代碼

Class.forName方法生成一個Class對象。做爲對對象操做的總入口。

建造者模式

jdk中的應用

java.lang.StringBuilder
java.lang.StringBuffer

解釋和代碼

StringBuilder和Stringbuffer能夠擴展原對象不一樣的字符串也能夠按不一樣的順序拼接

觀察者模式

jdk中的應用

java.util.Observer接口

解釋和代碼

這個接口好像我平時開發沒用到。他的全部實現類都是在sun包的。

狀態模式

jdk中的應用

java.util.Iterator

解釋和代碼

根據一個指針的狀態而改變本身的行爲

適配器模式

jdk中的應用

java.util.Arrays.asList()
java.io.InputStreamReader(InputStream)

解釋和代碼

將一個類的接口轉換成客戶但願的另一個接口。適配器模式使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠一塊兒工做。
Arrays將集合轉換爲list。Inputstream轉換成reader

備忘錄模式

jdk中的應用

解釋和代碼

組合模式

jdk中的應用

java.util.Map#putAll(Map)
java.util.List#addAll(Collection)
java.util.Set#addAll

解釋和代碼

組合模式用於把一組類似的對象看成一個單一的對象。和對象組合成集合一致

迭代器模式

jdk中的應用

java.util.Iterator
java.util.Enumeration

解釋和代碼

提供一個一致的方法來順序訪問集合中的對象,這個方法與底層的集合的具體實現無關。

單例模式

jdk中的應用

java.lang.Runtime
。。。。

解釋和代碼

private static Runtime currentRuntime = new Runtime();  
public static Runtime getRuntime() {  
    return currentRuntime;

橋接模式

jdk中的應用

java.sql.DrivenManager

解釋和代碼

clipboard.png
經過上圖能夠看出,基於JDBC的應用程序,使用JDBC的API,至關因而對數據庫操做的抽象的擴展,算做橋接模式的抽象部分;而具體的接口實現是由驅動來完成的,驅動這邊天然就至關於橋接模式的實現部分了。而橋接的方式,再也不是讓抽象部分持有實現部分,而是採用了相似於工廠的作法,經過DriverManager來把抽象部分和實現部分對接起來,從而實現抽象部分和實現部分解耦

命令模式

jdk中的應用

java.lang.Runable和線程池

解釋和代碼

Runnable:任務抽象,也就是「命令」;線程池經過submit,execute調用

職責鏈模式

jdk中的應用

jsp servlet 的 Filter

解釋和代碼

多個過濾器過濾,知足條件則跳轉入下一個過濾器

中介者模式

jdk中的應用

線程池的executer.execute方法
我以爲mvc模式可能更好理解

解釋和代碼

Controller做爲view和model的中介。使model和view透明化轉換

享元模式

jdk中的應用

java.lang.String

解釋和代碼

享元模式嘗試重用現有的同類對象,若是未找到匹配的對象,則建立新對象。String的常量池正是如此

解釋器模式

jdk中的應用

java.util.Pattern
java.text.Normalizer
java.text.Format

解釋和代碼

這個模式一般定義了一個語言的語法,而後解析相應語法的語句。簡單地說就是規定了格式

訪問者模式

jdk中的應用

javax.lang.model.element.AnnotationValue和AnnotationValueVisitor
javax.lang.model.element.Element和ElementVisitor
javax.lang.model.type.TypeMirror和TypeVisitor

解釋和代碼

好像都沒用過。。。。之後補上

空對象模式

jdk中的應用

java.util.Collections#emptyList()
java.util.Collections#emptyMap()
java.util.Collections#emptySet()

解釋和代碼

一個空對象取代 NULL

相關文章
相關標籤/搜索