- 一、Singleton(单例模式)
- 二、Facotry(静态工厂)
- 三、Factroy Method(工厂方法)
- 四、Abstract Factory(抽象工厂)
- 五、Buider(建造者)
- 六、Prototype(原型)
- 七、Adapter(适配器)
- 八、Bridge (桥接)
- 九、Composite(组合)
- 十、Decorator(装饰器)
- 十一、Facade(外观)
- 十二、Flyweight(享元)
- 十三、Proxy(代理)
- 十四、Iterator(迭代器)
- 十五、Observer(观察者)
- 十六、Mediator(中介者对象)
- 十七、Template Method(模板方法)
- 十八、Strategy(策略模式)
- 十九、Chain of Responsibility(职责链)
- 二十、Command(命令)
- 二十一、Interpreter(解释器)
- 二十二、State(状态)
- 二十三、Visitor(访问者)
- 二十四、Memento(备忘录)
一、Singleton(单例模式)
作用:保证类只有一个实例,提供一个全局访问点
体现:Runtime 、NumberFormat
- java.lang.Runtime#getRuntime()
- java.awt.Toolkit#getDefaultToolkit()
- java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()
- java.awt.Desktop#getDesktop()
二、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()
三、Factroy Method(工厂方法)
作用:子类决定实例化哪个类
体现:Collection.iterator
四、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()
五、Buider(建造者)
作用:(1)将构造逻辑提炼到单独的类中
(2)分离类的构造逻辑和表现
体现:DocumentBuilder
- java.lang.StringBuilder#append()
- java.lang.StringBuffer#append()
- java.sql.PreparedStatement
- javax.swing.GroupLayout.Group#addComponent()
六、Prototype(原型)
作用:复制对象(深复制、浅复制)
体现:Object.clone、Cloneable
- java.lang.Object#clone()
- java.lang.Cloneable
七、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()
八、Bridge (桥接)
作用:将抽象部分与其实现部分相分离,使他们可以独立的发生变化
体现:java.util.logging中的Handler和Formatter
- AWT (提供了抽象层映射于实际的操作系统)
- JDBC
九、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)

十、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

十一、Facade(外观)
作用:封装一组交互类,一致地对外提供接口;封装子系统,简化子系统调用
体现:java.util.logging包
- java.lang.Class
- javax.faces.webapp.FacesServlet

十二、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)
十三、Proxy(代理)
作用:透明调用被代理对象,无需知道复杂实现细节;增加被代理类的功能
体现:动态代理;RMI
- java.lang.reflect.Proxy
- RMI
十四、Iterator(迭代器)
作用:将集合的迭代和集合本身分离
体现:Iterator、Enumeration接口
- java.util.Iterator
- java.util.Enumeration
十五、Observer(观察者)
作用:通知对象状态改变
体现:java.util.Observer,Observable、Swing中的Listener
- java.util.EventListener
- javax.servlet.http.HttpSessionBindingListener
- javax.servlet.http.HttpSessionAttributeListener
- javax.faces.event.PhaseListener
十六、Mediator(中介者对象)
作用:用于协调多个类的操作
体现:Swing中的ButtonGroup
- java.util.Timer
- java.util.concurrent.Executor#execute()
- java.util.concurrent.ExecutorService#submit()
- java.lang.reflect.Method#invoke()
十七、Template Method(模板方法)
作用:定义算法的结构、子类只实现不同的部分
体现:ThreadPoolExecutor.Worker
- java.util.Collections#sort()
- java.io.InputStream#skip()
- java.io.InputStream#read()
- java.util.AbstractList#indexOf()

十八、Strategy(策略模式)
作用:提供不同的算法
体现:ThreadPoolExecutor的四种拒绝算法
- java.util.Comparator#compare()
- javax.servlet.http.HttpServlet
- javax.servlet.Filter#doFilter()

十九、Chain of Responsibility(职责链)
作用:请求会被链上面的对象处理,但是客户端不知道请求会被哪些对象处理
体现:java.util.logging.Logger会将log委托给parent logger、ClassLoader的委托模型
- java.util.logging.Logger#log()
- javax.servlet.Filter#doFilter()
二十、Command(命令)
作用:封装操作,使接口一致;将调用者和接收者在空间和时间上解耦
体现:Runnable、Callable、ThreadPoolExecutor
- java.lang.Runnable
- javax.swing.Action
二十一、Interpreter(解释器)
作用:用一组类代替某一规则
体现:java.util.regex.Pattern
- java.util.Pattern
- java.text.Normalizer
- java.text.Format
二十二、State(状态)
作用:将主对象和其状态分离,状态对象负责主对象的状态转换,使主对象类功能减轻
体现:
- java.util.Iterator
- javax.faces.lifecycle.LifeCycle#execute()
二十三、Visitor(访问者)
作用:异构的类之间添加聚合擦欧总;搜集聚合数据
体现:
- javax.lang.model.element.Element 和javax.lang.model.element.ElementVisitor
- javax.lang.model.type.TypeMirror 和javax.lang.model.type.TypeVisitor
二十四、Memento(备忘录)
作用:保持对象状态,需要时可恢复
体现:
- java.util.Date
- java.io.Serializable

