JDK中的23种经典设计模式

   1. jdk里的设计模式 
   2.  
   3. 下面是JDK中有关23种经典设计模式的示例 
   4.  
   5. Structural(结构模式) 
   6. Adapter: 
   7. 把一个接口或是类变成另外一种。 
   8.  
   9.     java.util.Arrays#asList() 
  10.     javax.swing.JTable(TableModel) 
  11.     java.io.InputStreamReader(InputStream) 
  12.     java.io.OutputStreamWriter(OutputStream) 
  13.     javax.xml.bind.annotation.adapters.XmlAdapter#marshal() 
  14.     javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal() 
  15.  
  16. Bridge: 
  17. 把抽象和实现解藕,于是接口和实现可在完全独立开来。 
  18.  
  19.     AWT (提供了抽象层映射于实际的操作系统) 
  20.     JDBC 
  21.  
  22. Composite: 
  23. 让使用者把单独的对象和组合对象混用。 
  24.  
  25.     javax.swing.JComponent#add(Component) 
  26.     java.awt.Container#add(Component) 
  27.     java.util.Map#putAll(Map) 
  28.     java.util.List#addAll(Collection) 
  29.     java.util.Set#addAll(Collection) 
  30.  
  31.  
  32.  
  33. Decorator: 
  34. 为一个对象动态的加上一系列的动作,而不需要因为这些动作的不同而产生大量的继承类。这个模式在JDK中几乎无处不在,所以,下面的列表只是一些典型的。 
  35.  
  36.     java.io.BufferedInputStream(InputStream) 
  37.     java.io.DataInputStream(InputStream) 
  38.     java.io.BufferedOutputStream(OutputStream) 
  39.     java.util.zip.ZipOutputStream(OutputStream) 
  40.     java.util.Collections#checked[List|Map|Set|SortedSet|SortedMap]() 
  41.  
  42. Facade: 
  43. 用一个简单的接口包状一组组件,接口,抽象或是子系统。 
  44.  
  45.     java.lang.Class 
  46.     javax.faces.webapp.FacesServlet 
  47.  
  48. Flyweight: 
  49. 有效率地存储大量的小的对象。 
  50.  
  51.     java.lang.Integer#valueOf(int) 
  52.     java.lang.Boolean#valueOf(boolean) 
  53.     java.lang.Byte#valueOf(byte) 
  54.     java.lang.Character#valueOf(char) 
  55.  
  56. Proxy: 
  57. 用一个简单的对象来代替一个复杂的对象。 
  58.  
  59.     java.lang.reflect.Proxy 
  60.     RMI 
  61.  
  62. Creational(创建模式) 
  63.  
  64. Abstract factory: 
  65. 创建一组有关联的对象实例。这个模式在JDK中也是相当的常见,还有很多的framework例如Spring。我们很容易找到这样的实例。 
  66.  
  67.     java.util.Calendar#getInstance() 
  68.     java.util.Arrays#asList() 
  69.     java.util.ResourceBundle#getBundle() 
  70.     java.sql.DriverManager#getConnection() 
  71.     java.sql.Connection#createStatement() 
  72.     java.sql.Statement#executeQuery() 
  73.     java.text.NumberFormat#getInstance() 
  74.     javax.xml.transform.TransformerFactory#newInstance() 
  75.  
  76. Builder: 
  77. 主要用来简化一个复杂的对象的创建。这个模式也可以用来实现一个 Fluent Interface。 
  78.  
  79.     java.lang.StringBuilder#append() 
  80.     java.lang.StringBuffer#append() 
  81.     java.sql.PreparedStatement 
  82.     javax.swing.GroupLayout.Group#addComponent() 
  83.  
  84. Factory: 
  85. 简单来说,按照需求返回一个类型的实例。 
  86.  
  87.     java.lang.Proxy#newProxyInstance() 
  88.     java.lang.Object#toString() 
  89.     java.lang.Class#newInstance() 
  90.     java.lang.reflect.Array#newInstance() 
  91.     java.lang.reflect.Constructor#newInstance() 
  92.     java.lang.Boolean#valueOf(String) 
  93.     java.lang.Class#forName() 
  94.  
  95. Prototype: 
  96. 使用自己的实例创建另一个实例。有时候,创建一个实例然后再把已有实例的值拷贝过去,是一个很复杂的动作。所以,使用这个模式可以避免这样的复杂性。 
  97.  
  98.     java.lang.Object#clone() 
  99.     java.lang.Cloneable 
100.  
101. Singleton: 
102. 只允许一个实例。在 Effective Java中建议使用Emun. 
103.  
104.     java.lang.Runtime#getRuntime() 
105.     java.awt.Toolkit#getDefaultToolkit() 
106.     java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment() 
107.     java.awt.Desktop#getDesktop() 
108.  
109. Behavioral(行为模式) 
110.  
111. Chain of responsibility: 
112. 把一个对象在一个链接传递直到被处理。在这个链上的所有的对象有相同的接口(抽象类)但却有不同的实现。 
113.  
114.     java.util.logging.Logger#log() 
115.     javax.servlet.Filter#doFilter() 
116.  
117. Command: 
118. 把一个或一些命令封装到一个对象中。 
119.  
120.     java.lang.Runnable 
121.     javax.swing.Action 
122.  
123. Interpreter: 
124. 一个语法解释器的模式。 
125.  
126.     java.util.Pattern 
127.     java.text.Normalizer 
128.     java.text.Format 
129.  
130. Iterator: 
131. 提供一种一致的方法来顺序遍历一个容器中的所有元素。 
132.  
133.     java.util.Iterator 
134.     java.util.Enumeration 
135.  
136. Mediator: 
137. 用来减少对象单的直接通讯的依赖关系。使用一个中间类来管理消息的方向。 
138.  
139.     java.util.Timer 
140.     java.util.concurrent.Executor#execute() 
141.     java.util.concurrent.ExecutorService#submit() 
142.     java.lang.reflect.Method#invoke() 
143.  
144. Memento: 
145. 给一个对象的状态做一个快照。Date类在内部使用了一个long型来做这个快照。 
146.  
147.     java.util.Date 
148.     java.io.Serializable 
149.  
150. Null Object: 
151. 这个模式用来解决如果一个Collection中没有元素的情况。 
152.  
153.     java.util.Collections#emptyList() 
154.     java.util.Collections#emptyMap() 
155.     java.util.Collections#emptySet() 
156.  
157. Observer: 
158. 允许一个对象向所有的侦听的对象广播自己的消息或事件。 
159.  
160.     java.util.EventListener 
161.     javax.servlet.http.HttpSessionBindingListener 
162.     javax.servlet.http.HttpSessionAttributeListener 
163.     javax.faces.event.PhaseListener 
164.  
165. State: 
166. 这个模式允许你可以在运行时很容易地根据自身内部的状态改变对象的行为。 
167.  
168.     java.util.Iterator 
169.     javax.faces.lifecycle.LifeCycle#execute() 
170.  
171. Strategy: 
172. 定义一组算法,并把其封装到一个对象中。然后在运行时,可以灵活的使用其中的一个算法。 
173.  
174.     java.util.Comparator#compare() 
175.     javax.servlet.http.HttpServlet 
176.     javax.servlet.Filter#doFilter() 
177.  
178. Template method: 
179. 允许子类重载部分父类而不需要完全重写。 
180.  
181.     java.util.Collections#sort() 
182.     java.io.InputStream#skip() 
183.     java.io.InputStream#read() 
184.     java.util.AbstractList#indexOf() 
185.  
186. Visitor: 
187.  
188. 作用于某个对象群中各个对象的操作. 它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作. 
189.  
190.     javax.lang.model.element.Element 和javax.lang.model.element.ElementVisitor 
191.     javax.lang.model.type.TypeMirror 和javax.lang.model.type.TypeVisitor  

你可能感兴趣的:(java,设计模式,jdk,servlet,swing)