成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

簡述JDK里的23個經(jīng)典設(shè)計模式

開發(fā) 后端
本文轉(zhuǎn)自著名開發(fā)者陳皓的博文,講述的是JDK中有關(guān)23個經(jīng)典設(shè)計模式的示例,以及在stakeoverflow也有相應(yīng)的討論。

本文總結(jié)了JDK中有關(guān)23個經(jīng)典設(shè)計模式的示例,在stakeoverflow也有相應(yīng)的討論:

Adapter:

把一個接口或是類變成另外一種。

  1. java.util.Arrays#asList()  
  2.  
  3. javax.swing.JTable(TableModel)  
  4.  
  5. java.io.InputStreamReader(InputStream)  
  6.  
  7. java.io.OutputStreamWriter(OutputStream)  
  8.  
  9. javax.xml.bind.annotation.adapters.XmlAdapter#marshal()  
  10.  
  11. javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()  
  12.  

Bridge:

把抽象和實現(xiàn)解藕,于是接口和實現(xiàn)可在完全獨立開來。

AWT (提供了抽象層映射于實際的操作系統(tǒng))

JDBC

Composite:

讓使用者把單獨的對象和組合對象混用。

  1. javax.swing.JComponent#add(Component)  
  2.  
  3. java.awt.Container#add(Component)  
  4.  
  5. java.util.Map#putAll(Map)  
  6.  
  7. java.util.List#addAll(Collection)  
  8.  
  9. java.util.Set#addAll(Collection)  
  10.  

Decorator:

為一個對象動態(tài)的加上一系列的動作,而不需要因為這些動作的不同而產(chǎn)生大量的繼承類。這個模式在JDK中幾乎無處不在,所以,下面的列表只是一些典型的。

  1.  
  2.  
  3. java.io.BufferedInputStream(InputStream)  
  4.  
  5. java.io.DataInputStream(InputStream)  
  6.  
  7. java.io.BufferedOutputStream(OutputStream)  
  8.  
  9. java.util.zip.ZipOutputStream(OutputStream)  
  10.  
  11. java.util.Collections#checked[List|Map|Set|SortedSet|SortedMap]()  
  12.  

Facade:

用一個簡單的接口包狀一組組件,接口,抽象或是子系統(tǒng)。

  1. java.lang.Class  
  2.  
  3. javax.faces.webapp.FacesServlet  
  4.  

Flyweight:

有效率地存儲大量的小的對象。

  1. java.lang.Integer#valueOf(int)  
  2.  
  3. java.lang.Boolean#valueOf(boolean)  
  4.  
  5. java.lang.Byte#valueOf(byte)  
  6.  
  7. java.lang.Character#valueOf(char)  
  8.  

Proxy:

用一個簡單的對象來代替一個復(fù)雜的對象。

  1. java.lang.reflect.Proxy  
  2.  

RMI

Creational(創(chuàng)建模式)

Abstract factory:

創(chuàng)建一組有關(guān)聯(lián)的對象實例。這個模式在JDK中也是相當(dāng)?shù)某R姡€有很多的framework例如Spring。我們很容易找到這樣的實例。

  1. java.util.Calendar#getInstance()  
  2.  
  3. java.util.Arrays#asList()  
  4.  
  5. java.util.ResourceBundle#getBundle()  
  6.  
  7. java.sql.DriverManager#getConnection()  
  8.  
  9. java.sql.Connection#createStatement()  
  10.  
  11. java.sql.Statement#executeQuery()  
  12.  
  13. java.text.NumberFormat#getInstance()  
  14.  
  15. javax.xml.transform.TransformerFactory#newInstance()  
  16.  

Builder:

主要用來簡化一個復(fù)雜的對象的創(chuàng)建。這個模式也可以用來實現(xiàn)一個 Fluent Interface。

  1. java.lang.StringBuilder#append()  
  2.  
  3. java.lang.StringBuffer#append()  
  4.  
  5. java.sql.PreparedStatement  
  6.  
  7. javax.swing.GroupLayout.Group#addComponent()  
  8.  

Factory:

簡單來說,按照需求返回一個類型的實例。

  1. java.lang.Proxy#newProxyInstance()  
  2.  
  3. java.lang.Object#toString()  
  4.  
  5. java.lang.Class#newInstance()  
  6.  
  7. java.lang.reflect.Array#newInstance()  
  8.  
  9. java.lang.reflect.Constructor#newInstance()  
  10.  
  11. java.lang.Boolean#valueOf(String)  
  12.  
  13. java.lang.Class#forName()  
  14.  

Prototype:

使用自己的實例創(chuàng)建另一個實例。有時候,創(chuàng)建一個實例然后再把已有實例的值拷貝過去,是一個很復(fù)雜的動作。所以,使用這個模式可以避免這樣的復(fù)雜性。

  1. java.lang.Object#clone()  
  2.  
  3. java.lang.Cloneable  
  4.  

Singleton:

只允許一個實例。在 Effective Java中建議使用Emun.

  1. java.lang.Runtime#getRuntime()  
  2.  
  3. java.awt.Toolkit#getDefaultToolkit()  
  4.  
  5. java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()  
  6.  
  7. java.awt.Desktop#getDesktop()  
  8.  

Behavioral(行為模式)

Chain of responsibility:

把一個對象在一個鏈接傳遞直到被處理。在這個鏈上的所有的對象有相同的接口(抽象類)但卻有不同的實現(xiàn)。

  1. java.util.logging.Logger#log()  
  2.  
  3. javax.servlet.Filter#doFilter()  
  4.  

Command:

把一個或一些命令封裝到一個對象中。

  1. java.lang.Runnable  
  2.  
  3. javax.swing.Action  
  4.  

Interpreter:

一個語法解釋器的模式。

  1. java.util.Pattern  
  2.  
  3. java.text.Normalizer  
  4.  
  5. java.text.Format  
  6.  

Iterator:

提供一種一致的方法來順序遍歷一個容器中的所有元素。

  1. java.util.Iterator  
  2.  
  3. java.util.Enumeration  
  4.  

Mediator:

用來減少對象單的直接通訊的依賴關(guān)系。使用一個中間類來管理消息的方向。

  1. java.util.Timer  
  2.  
  3. java.util.concurrent.Executor#execute()  
  4.  
  5. java.util.concurrent.ExecutorService#submit()  
  6.  
  7. java.lang.reflect.Method#invoke()  
  8.  

Memento:

給一個對象的狀態(tài)做一個快照。Date類在內(nèi)部使用了一個long型來做這個快照。

  1. java.util.Date  
  2.  
  3. java.io.Serializable  
  4.  

Null Object:

這個模式用來解決如果一個Collection中沒有元素的情況。

  1. java.util.Collections#emptyList()  
  2.  
  3. java.util.Collections#emptyMap()  
  4.  
  5. java.util.Collections#emptySet()  
  6.  

Observer:

允許一個對象向所有的偵聽的對象廣播自己的消息或事件。

  1. java.util.EventListener  
  2.  
  3. javax.servlet.http.HttpSessionBindingListener  
  4.  
  5. javax.servlet.http.HttpSessionAttributeListener  
  6.  
  7. javax.faces.event.PhaseListener  
  8.  

State:

這個模式允許你可以在運行時很容易地根據(jù)自身內(nèi)部的狀態(tài)改變對象的行為。

  1. java.util.Iterator  
  2.  
  3. javax.faces.lifecycle.LifeCycle#execute()  
  4.  

Strategy:

定義一組算法,并把其封裝到一個對象中。然后在運行時,可以靈活的使用其中的一個算法。

  1. java.util.Comparator#compare()  
  2.  
  3. javax.servlet.http.HttpServlet  
  4.  
  5. javax.servlet.Filter#doFilter()  
  6.  

Template method:

允許子類重載部分父類而不需要完全重寫。

  1. java.util.Collections#sort()  
  2.  
  3. java.io.InputStream#skip()  
  4.  
  5. java.io.InputStream#read()  
  6.  
  7. java.util.AbstractList#indexOf()  
  8.  

Visitor:

作用于某個對象群中各個對象的操作. 它可以使你在不改變這些對象本身的情況下,定義作用于這些對象的新操作.

  1. javax.lang.model.element.Element 和javax.lang.model.element.ElementVisitor  
  2.  
  3. javax.lang.model.type.TypeMirror 和javax.lang.model.type.TypeVisitor  
  4.  

 

責(zé)任編輯:張攀 來源: coolshell
相關(guān)推薦

2020-10-14 13:58:14

23種設(shè)計模式速記

2024-05-30 12:27:42

Python代碼

2009-07-07 16:39:40

JDK Observe

2009-06-22 16:34:30

框架架構(gòu)設(shè)計模式

2009-01-04 13:49:17

Java設(shè)計模式設(shè)計模式工廠模式

2023-10-19 13:43:00

設(shè)計模式軟件設(shè)計

2012-05-28 09:16:12

Java設(shè)計模式

2009-06-18 10:13:00

Java設(shè)計模式

2021-06-08 06:46:48

設(shè)計模式創(chuàng)建型

2024-12-13 08:28:45

設(shè)計模式依賴

2024-10-29 16:13:04

Python字典API

2017-03-20 18:03:51

2019-04-24 09:43:46

代碼開發(fā)工具

2024-08-16 13:59:00

2011-12-27 10:17:56

JDKJava

2020-07-30 08:10:08

框架設(shè)計Spring Secu

2009-07-10 11:02:17

WebWork參數(shù)配置

2023-03-03 13:10:15

2022-08-24 14:14:58

JavaScript函數(shù)

2022-06-16 08:24:59

設(shè)計模式代碼前端
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 99精品久久 | 免费久久精品视频 | 午夜在线 | 久久久久久国产 | 紧缚调教一区二区三区视频 | 久久综合久久久 | 成人不卡视频 | 美女在线视频一区二区三区 | 欧美久久久久 | 国产精久久久久久 | 国产免费一区二区 | www.青青草| 日日干夜夜操 | 国产高清精品在线 | 久久久久免费精品国产 | 免费一级欧美在线观看视频 | 国产激情在线 | 一区二区成人 | 国产一区二区欧美 | 亚洲精品一区在线观看 | 亚洲日日夜夜 | 国产精品一区二区三区在线 | 91免费观看视频 | 国产欧美日韩综合精品一区二区 | 亚洲一区二区视频在线观看 | 亚洲人成人一区二区在线观看 | 91伊人| 国产玖玖 | 欧美综合一区 | 激情五月综合 | 涩涩视频在线观看免费 | 99精品国产一区二区青青牛奶 | av天天看| 国产欧美日韩二区 | 国产精品久久久久久二区 | 中文二区| 黄色毛片一级 | 国内自拍偷拍视频 | 91网站在线观看视频 | 亚洲精品一区二区三区蜜桃久 | 视频一区二区三区中文字幕 |