23种设计模式在JDK中的例子

老杨叔叔 2011-03-26

抽象工厂(类型recognizeable/界面造物方法返回一个抽象)

java.util.Calendar的#的getInstance()

java.util.Arrays#asList()

java.util.ResourceBundle#的getBundle()

#openConnection的java.net.URL()

java.sql.DriverManager来#的getConnection()

java.sql.Connection来#的createStatement()

java.sql.Statement#的executeQuery()

java.text.NumberFormat#的getInstance()

java.lang.management.ManagementFactory(所有的getXXX()方法)

java.nio.charset.Charset#的forName()

javax.xml.parsers.DocumentBuilderFactory#的newInstance()

javax.xml.transform.TransformerFactory#的newInstance()

javax.xml.xpath.XPathFactory#的newInstance()

生成器(本身recognizeable造物的实例方法返回)

java.lang.StringBuilder#追加()(不同步)

java.lang.StringBuffer#追加()(同步)

java.nio.ByteBuffer#把()(也CharBuffer的,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer和DoubleBuffer)

javax.swing.GroupLayout.Group#addComponent()

实现所有java.lang.Appendable

工厂方法(类型recognizeable造物的具体办法由返回)

java.lang.Object的#toString()方法(子类重载的一切)

java.lang.Class的#的newInstance()

为java.lang.Integer#方法valueOf(String)(也布尔,字节,字符,短,长,浮法和双)

#的java.lang.Class的forName()

java.lang.reflect.Array#的newInstance()

java.lang.reflect.Constructor#的newInstance()

原型(一recognizeable方法返回由造物不同属性相同的实例本身带)

java.lang.Object的#clone()方法(类必须实现java.lang.Cloneable)

辛格尔顿(即recognizeable方法返回由造物相同的实例(本身通常的)每次)

java.lang.Runtime#getRuntime()

java.awt.Desktop#getDesktop()

结构模式

适配器(一个实例的recognizeable造物服用方法不同的抽象/接口类型并返回自己的执行/另一个抽象/接口类型,装饰/覆盖给定的实例)

java.io.InputStreamReader(InputStream的)(返回一个阅读器)

java.io.OutputStreamWriter(OutputStream的)(返回一个作家)

javax.xml.bind.annotation.adapters.XmlAdapter#元帅()和#解组()

大桥(一实例的recognizeable造物服用方法不同的抽象/接口类型和返回一个类型实施自己的抽象/接口,它代表/使用给定的实例)

谁也没有想到呢。一个虚构的例子是新LinkedHashMap的(LinkedHashSet的<K>,列表<V>)返回一个不可修改的相关地图,不克隆项目,但使用它们。该java.util.Collections的#newSetFromMap()和singletonXXX()方法,但是很接近。

复合材料(附recognizeable实例由行为服用方法相同的抽象/接口类型)

java.util.Map的#的putAll(地图)

java.util.List的#addAll(征收)

为java.util.Set#addAll(征收)

java.nio.ByteBuffer#放(ByteBuffer的)(也CharBuffer的,ShortBuffer,IntBuffer,LongBuffer,FloatBuffer和DoubleBuffer)

java.awt.Container#加入(组件)(几乎所有的Swing从而超过)

装饰(附recognizeable一个实例造物服用方法相同的抽象/接口类型)

子类的所有java.io.InputStream,OutputStream的,读者和作家有一个构造函数以一个相同类型的实例。

实现几乎所有的java.util.List,设置和地图具有构造纵观同类型的实例。

java.util.Collections中的checkedXXX(),synchronizedXXX()和unmodifiableXXX()方法。

javax.servlet.http.HttpServletRequestWrapper和HttpServletResponseWrapper

门面(使用情况的recognizeable由国内的行为方式不同的独立抽象/接口类型)

javax.faces.context.FacesContext,它在内部采用了一些其他人的抽象/接口类型LifeCycle的,ViewHandler中,NavigationHandler和许多)更多的最终用户无需担心它大约有(其中可重载不过,这样的注射。

javax.faces.context.ExternalContext,它在内部使用的ServletContext,HttpSession中,的HttpServletRequest,HttpServletResponse的,等等

享元(理念recognizeablemultiton“的造物方法返回一个缓存的实例,有点而”)

为java.lang.Integer#方法valueOf(int)的(还布尔,字节,字符,短,长,浮法和双)

代理(方法recognizeable的造物,它返回一个类型的实现给定的抽象/接口而这反过来又代表/使用一个不同类型的实现给定的抽象/接口)

java.lang.reflect.Proxy

的java.rmi.*,整个API的实际。

维基百科的例子是恕我直言有点差,延迟加载实际上已完全无关,在所有代理的模式。

行为模式

责任链(在recognizeable相同的方法由行为方法,(间接调用),另一个执行同样的抽象/接口类型的队列中)

java.util.logging.Logger的#日志()

javax.servlet.Filter接口#的doFilter()

命令(一recognizeable执行由行为方式在一个抽象/接口类型的其中一个方法中调用不同的抽象/接口类型已经封装了其创建命令执行期间)

实现所有java.lang.Runnable的

实现所有javax.swing.Action

相关推荐