JDK中使用到的23个经典设计模式

A. 创建模式

Singleton(单态):只允许一个实例

  1. Runtime.getRuntime();  
  2. java.awt.Toolkit.getDefaultToolkit();  
  3. java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();  
  4. java.awt.Desktop.getDesktop();  
        Runtime.getRuntime();
        java.awt.Toolkit.getDefaultToolkit();
        java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment();
        java.awt.Desktop.getDesktop();

Abstract factory(抽象工厂):创建一组有关联的对象实例

  1. java.util.Calendar.getInstance();  
  2. java.util.Arrays.asList();  
  3. java.util.ResourceBundle.getBundle(String baseName);  
  4. java.sql.DriverManager.getConnection(String url);  
  5. java.sql.Connection.createStatement();  
  6. java.sql.Statement.executeQuery(String sql);  
  7. java.text.NumberFormat.getInstance();  
  8. javax.xml.transform.TransformerFactory.newInstance();  
        java.util.Calendar.getInstance();
        java.util.Arrays.asList();
        java.util.ResourceBundle.getBundle(String baseName);
        java.sql.DriverManager.getConnection(String url);
        java.sql.Connection.createStatement();
        java.sql.Statement.executeQuery(String sql);
        java.text.NumberFormat.getInstance();
        javax.xml.transform.TransformerFactory.newInstance();

Factory(工厂方法):按照需求返回一个类型的实例

  1.  java.lang.Proxy.newProxyInstance();  
  2. java.lang.Object.toString();  
  3. java.lang.Class.newInstance();  
  4. java.lang.reflect.Array.newInstance();  
  5. java.lang.reflect.Constructor.newInstance();  
  6. java.lang.Boolean.valueOf(String s);  
  7. java.lang.Class.forName(String className);  
         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 s);
        java.lang.Class.forName(String className);

Builder(建造者):主要用来简化一个复杂的对象的创建

  1. java.lang.StringBuilder.append(Object obj);  
  2. java.lang.StringBuffer.append(Object obj);    
  3. java.sql.PreparedStatement    
  4. javax.swing.GroupLayout.Group.addComponent();  
        java.lang.StringBuilder.append(Object obj);
        java.lang.StringBuffer.append(Object obj);  
        java.sql.PreparedStatement  
        javax.swing.GroupLayout.Group.addComponent();

Prototype(原型):使用自己的实例创建另一个实例

  1. java.lang.Object.clone();  
  2. java.lang.Cloneable;  
        java.lang.Object.clone();
        java.lang.Cloneable;

B.结构模式

Adapter(适配器):个接口或是类变成另外一种

  1. java.util.Arrays.asList();  
  2. javax.swing.JTable(TableModel)    
  3. java.io.InputStreamReader(InputStream)    
  4. java.io.OutputStreamWriter(OutputStream)    
  5. javax.xml.bind.annotation.adapters.XmlAdapter.marshal();  
  6. javax.xml.bind.annotation.adapters.XmlAdapter.unmarshal();  
        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();

Composite(组合):让使用者把单独的对象和组合对象混用

  1. javax.swing.JComponent.add(Component comp);  
  2. java.awt.Container.add(Component comp);   
  3. java.util.Map.putAll(Map m);  
  4. java.util.List.addAll(Collection c);  
  5. java.util.Set.addAll(Collection c);  
        javax.swing.JComponent.add(Component comp);
        java.awt.Container.add(Component comp); 
        java.util.Map.putAll(Map m);
        java.util.List.addAll(Collection c);
        java.util.Set.addAll(Collection c);

Decorator(装饰器):为一个对象动态的加上一系列的动作,而不需要因为这些动作的不同而产生大量的继承类

  1. java.io.BufferedInputStream(InputStream);  
  2. java.io.DataInputStream(InputStream);  
  3. java.io.BufferedOutputStream(OutputStream);  
  4. java.util.zip.ZipOutputStream(OutputStream);  
  5. java.util.Collections.checkedList(List list, Class type) ;   
        java.io.BufferedInputStream(InputStream);
        java.io.DataInputStream(InputStream);
        java.io.BufferedOutputStream(OutputStream);
        java.util.zip.ZipOutputStream(OutputStream);
        java.util.Collections.checkedList(List list, Class type) ; 

Facade(门面):一个简单的接口包状一组组件,接口,抽象或是子系统。

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

Flyweight(共享元):有效率地存储大量的小的对象

  1. java.lang.Integer.valueOf(int)    
  2. java.lang.Boolean.valueOf(boolean)    
  3. java.lang.Byte.valueOf(byte)  
  4. java.lang.Character.valueOf(char)  
        java.lang.Integer.valueOf(int)  
        java.lang.Boolean.valueOf(boolean)  
        java.lang.Byte.valueOf(byte)
        java.lang.Character.valueOf(char)

Proxy(代理):用一个简单的对象来代替一个复杂的对象

  1. java.lang.reflect.Proxy  
         java.lang.reflect.Proxy

C.行为模式

Chain of Responsibility(责任链):一个对象在一个链接传递直到被处理

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

Command(命令):将一系列的命令封装成在一个类中

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

Interpreter(解释器):定义语言的文法 ,并且建立一个解释器来解释该语言中的句子

  1. java.util.Pattern  
  2. java.text.Normalizer  
  3. java.text.Format    
        java.util.Pattern
        java.text.Normalizer
        java.text.Format  

Iterator(迭代器):对象遍历

  1. java.util.Iterator  
  2. java.util.Enumeration  
        java.util.Iterator
        java.util.Enumeration

Mediator(中介):用一个中介对象来封装一系列关于对象交互行为.

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

Memento(快照):保存另外一个对象内部状态拷贝的对象

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

Observer(观察者):事件监听器

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

State(状态):不同的状态,不同的行为;或者说,每个状态有着相应的行为.

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

Strategy(策略):定义一系列的算法,把这些算法一个个封装成单独的类

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

Template(模板):定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中

  1. java.util.Collections.sort()  
  2. java.io.InputStream.skip()   
  3. java.io.InputStream.read()  
  4. java.util.AbstractList.indexOf()   
        java.util.Collections.sort()
        java.io.InputStream.skip() 
        java.io.InputStream.read()
        java.util.AbstractList.indexOf() 

Visitor(访问者):作用于某个对象群中各个对象的操作. 它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操作.

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



转载URL:

 http://blog.csdn.net/bakeloar/article/details/6608806 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值