一、Singleton(单例模式)

作用:保证类只有一个实例,提供一个全局访问点
体现:Runtime 、NumberFormat

  • java.lang.Runtime#getRuntime()
  • java.awt.Toolkit#getDefaultToolkit()
  • java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()
  • java.awt.Desktop#getDesktop()

image.png

二、Facotry(静态工厂)

作用:(1)代替构造函数创建对象
(2)方法名比构造函数清晰
体现:Interger.valueOf 、Class.forName

  • java.lang.Proxy#newProxyInstance()
  • java.lang.Object#toString()
  • java.lang.Class#newInstance()
  • java.lang.reflect.Array#newInstance()
  • java.lang.reflect.Constructor#newInstance()
  • java.lang.Boolean#valueOf(String)
  • java.lang.Class#forName()

image.png

三、Factroy Method(工厂方法)

作用:子类决定实例化哪个类
体现:Collection.iterator
image.png

四、Abstract Factory(抽象工厂)

作用:创建某一种类的对象
体现:java.sql包、UIManager(swing外观)

  • java.util.Calendar#getInstance()
  • java.util.Arrays#asList()
  • java.util.ResourceBundle#getBundle()
  • java.sql.DriverManager#getConnection()
  • java.sql.Connection#createStatement()
  • java.sql.Statement#executeQuery()
  • java.text.NumberFormat#getInstance()
  • javax.xml.transform.TransformerFactory#newInstance()

image.png

五、Buider(建造者)

作用:(1)将构造逻辑提炼到单独的类中
(2)分离类的构造逻辑和表现
体现:DocumentBuilder

  • java.lang.StringBuilder#append()
  • java.lang.StringBuffer#append()
  • java.sql.PreparedStatement
  • javax.swing.GroupLayout.Group#addComponent()

image.png

六、Prototype(原型)

作用:复制对象(深复制、浅复制)
体现:Object.clone、Cloneable

  • java.lang.Object#clone()
  • java.lang.Cloneable

image.png

七、Adapter(适配器)

作用:使不兼容的接口相容
体现:java.io.InputStreamReader(InputStream)、java.io.OutputStreamWriter(OutputStream)

  • java.util.Arrays#asList()
  • javax.swing.JTable(TableModel)
  • java.io.InputStreamReader(InputStream)
  • java.io.OutputStreamWriter(OutputStream)
  • javax.xml.bind.annotation.adapters.XmlAdapter#marshal()
  • javax.xml.bind.annotation.adapters.XmlAdapter#unmarshal()

image.png

八、Bridge (桥接)

作用:将抽象部分与其实现部分相分离,使他们可以独立的发生变化
体现:java.util.logging中的Handler和Formatter

  • AWT (提供了抽象层映射于实际的操作系统)
  • JDBC

image.png

九、Composite(组合)

作用:一致地对待组合对象和独立对象
体现:org.wsc.dom、 javax.swing.JComponent#add(Component)

  • javax.swing.JComponent#add(Component)
  • java.awt.Container#add(Component)
  • java.util.Map#putAll(Map)
  • java.util.List#addAll(Collection)
  • java.util.Set#addAll(Collection)

image.png

十、Decorator(装饰器)

作用:为类添加新的功能;防止类继承带来的爆炸式增长
体现:java.io包、java.util.Collections#synchronizedList(List)

  • java.io.BufferedInputStream(InputStream)
  • java.io.DataInputStream(InputStream)
  • java.io.BufferedOutputStream(OutputStream)
  • java.util.zip.ZipOutputStream(OutputStream)
  • java.util.Collections#checkedList|Map|Set|SortedSet|SortedMap

image.png

十一、Facade(外观)

作用:封装一组交互类,一致地对外提供接口;封装子系统,简化子系统调用
体现:java.util.logging包

  • java.lang.Class
  • javax.faces.webapp.FacesServlet

image.png

十二、Flyweight(享元)

作用:共享对象,节省内存
体现:Integer.valueOf(int i)、Character.valueOf(char c)、String常量池

  • java.lang.Integer#valueOf(int)
  • java.lang.Boolean#valueOf(boolean)
  • java.lang.Byte#valueOf(byte)
  • java.lang.Character#valueOf(char)

image.png

十三、Proxy(代理)

作用:透明调用被代理对象,无需知道复杂实现细节;增加被代理类的功能
体现:动态代理;RMI

  • java.lang.reflect.Proxy
  • RMI

image.png

十四、Iterator(迭代器)

作用:将集合的迭代和集合本身分离
体现:Iterator、Enumeration接口

  • java.util.Iterator
  • java.util.Enumeration

image.png

十五、Observer(观察者)

作用:通知对象状态改变
体现:java.util.Observer,Observable、Swing中的Listener

  • java.util.EventListener
  • javax.servlet.http.HttpSessionBindingListener
  • javax.servlet.http.HttpSessionAttributeListener
  • javax.faces.event.PhaseListener

image.png

十六、Mediator(中介者对象)

作用:用于协调多个类的操作
体现:Swing中的ButtonGroup

  • java.util.Timer
  • java.util.concurrent.Executor#execute()
  • java.util.concurrent.ExecutorService#submit()
  • java.lang.reflect.Method#invoke()

image.png

十七、Template Method(模板方法)

作用:定义算法的结构、子类只实现不同的部分
体现:ThreadPoolExecutor.Worker

  • java.util.Collections#sort()
  • java.io.InputStream#skip()
  • java.io.InputStream#read()
  • java.util.AbstractList#indexOf()

image.png

十八、Strategy(策略模式)

作用:提供不同的算法
体现:ThreadPoolExecutor的四种拒绝算法

  • java.util.Comparator#compare()
  • javax.servlet.http.HttpServlet
  • javax.servlet.Filter#doFilter()

image.png

十九、Chain of Responsibility(职责链)

作用:请求会被链上面的对象处理,但是客户端不知道请求会被哪些对象处理
体现:java.util.logging.Logger会将log委托给parent logger、ClassLoader的委托模型

  • java.util.logging.Logger#log()
  • javax.servlet.Filter#doFilter()

image.png

二十、Command(命令)

作用:封装操作,使接口一致;将调用者和接收者在空间和时间上解耦
体现:Runnable、Callable、ThreadPoolExecutor

  • java.lang.Runnable
  • javax.swing.Action

image.png

二十一、Interpreter(解释器)

作用:用一组类代替某一规则
体现:java.util.regex.Pattern

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

image.png

二十二、State(状态)

作用:将主对象和其状态分离,状态对象负责主对象的状态转换,使主对象类功能减轻
体现:

  • java.util.Iterator
  • javax.faces.lifecycle.LifeCycle#execute()

image.png

二十三、Visitor(访问者)

作用:异构的类之间添加聚合擦欧总;搜集聚合数据
体现:

  • javax.lang.model.element.Element 和javax.lang.model.element.ElementVisitor
  • javax.lang.model.type.TypeMirror 和javax.lang.model.type.TypeVisitor

image.png

二十四、Memento(备忘录)

作用:保持对象状态,需要时可恢复
体现:

  • java.util.Date
  • java.io.Serializable

image.png