博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK中的设计模式应用实例
阅读量:6840 次
发布时间:2019-06-26

本文共 4146 字,大约阅读时间需要 13 分钟。

  hot3.png

在JDK(Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改JDK源码的前提下开发出自己的应用软件,本文列出了部分JDK中的模式应用实例,有兴趣的童鞋可以深入研究,看看前Sun公司的开发人员是如何在实际框架开发中运用设计模式的,微笑,Sunny认为,研究JDK类库中的模式实例也不失为学习如何使用设计模式的一个好方式,吐舌头

 

创建型模式:

(1) 抽象工厂模式(Abstract Factory)

• .util.Calendar#getInstance()

• java.util.Arrays#asList()

• java.util.ResourceBundle#getBundle()

• java.URL#openConnection()

• 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()

 

(2) 建造者模式(Builder)

• java.lang.StringBuilder#append()

• java.lang.StringBuffer#append()

• java.nio.ByteBuffer#put() (CharBuffer, ShortBuffer, IntBuffer,LongBuffer, FloatBuffer 和DoubleBuffer与之类似)

• javax.swing.GroupLayout.Group#addComponent()

• java.sql.PreparedStatement

• java.lang.Appendable的所有实现类

 

(3) 工厂方法模式(Factory Method)

• java.lang.Object#toString() (在其子类中可以覆盖该方法)

• java.lang.Class#newInstance()

• java.lang.Integer#valueOf(String) (Boolean, Byte, Character,Short, Long, Float 和 Double与之类似)

• java.lang.Class#forName()

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

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

 

(4) 原型模式(Prototype)

• java.lang.Object#clone() (支持浅克隆的类必须实现java.lang.Cloneable接口)

 

(5) 单例模式 (Singleton)

• java.lang.Runtime#getRuntime()

• java.awt.Desktop#getDesktop() 

 

结构型模式:

(1) 适配器模式(Adapter)

•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()

 

(2) 桥接模式(Bridge)

• AWT (提供了抽象层映射于实际的)

•JDBC

 

(3) 组合模式(Composite)

•javax.swing.JComponent#add(Component)

•java.awt.#add(Component)

•java.util.Map#putAll(Map)

•java.util.List#addAll(Collection)

•java.util.Set#addAll(Collection)

 

(4) 装饰模式(Decorator)

•java.io.BufferedInputStream(InputStream)

•java.io.DataInputStream(InputStream)

•java.io.BufferedOutputStream(OutputStream)

•java.util.zip.ZipOutputStream(OutputStream)

•java.util.Collections#checked[List|Map|Set|SortedSet|SortedMap]()

 

(5) 外观模式(Facade)

•java.lang.Class

•javax.faces.webapp.FacesServlet

 

(6) 享元模式(Flyweight)

•java.lang.Integer#valueOf(int)

•java.lang.Boolean#valueOf(boolean)

• java.lang.Byte#valueOf(byte)

•java.lang.Character#valueOf(char)

 

(7) 代理模式(Proxy)

• java.lang.reflect.Proxy

•java.rmi.*

 

行为型模式:

(1) 职责链模式(Chain of Responsibility)

•java.util.logging.Logger#log()

•javax.servlet.Filter#doFilter()

 

(2) 命令模式(Command)

• java.lang.Runnable

• javax.swing.Action

 

(3) 解释器模式(Interpreter)

• java.util.Pattern

• java.text.Normalizer

• java.text.Format

• javax.el.ELResolver

 

(4) 迭代器模式(Iterator)

• java.util.Iterator

• java.util.Enumeration

 

(5) 中介者模式(Mediator)

• java.util.Timer (所有scheduleXXX()方法)

• java.util.concurrent.Executor#execute()

• java.util.concurrent.ExecutorService (invokeXXX()和submit()方法)

• java.util.concurrent.ScheduledExecutorService (所有scheduleXXX()方法)

•java.lang.reflect.Method#invoke()

 

(6) 备忘录模式(Memento)

•java.util.Date

•java.io.Serializable

•javax.faces.component.StateHolder

 

(7) 观察者模式(Observer)

•java.util.Observer/java.util.Observable

•java.util.EventListener (所有子类)

•javax.servlet.http.HttpSessionBindingListener

•javax.servlet.http.HttpSessionAttributeListener

•javax.faces.event.PhaseListener

 

(8) 状态模式(State)

•java.util.Iterator

•javax.faces.lifecycle.LifeCycle#execute()

 

(9) 策略模式(Strategy)

• java.util.Comparator#compare()

• javax.servlet.http.HttpServlet

• javax.servlet.Filter#doFilter()

 

(10) 模板方法模式(Template Method)

•java.io.InputStream, java.io.OutputStream, java.io.Reader和java.io.Writer的所有非抽象方法

•java.util.AbstractList, java.util.AbstractSet和java.util.AbstractMap的所有非抽象方法

•javax.servlet.http.HttpServlet#doXXX()

 

(11) 访问者模式(Visitor)

•javax.lang.model.element.AnnotationValue和AnnotationValueVisitor

•javax.lang.model.element.Element和ElementVisitor

•javax.lang.model.type.TypeMirror和TypeVisitor

 

参见:和。

 

转载于:https://my.oschina.net/ohalo/blog/883652

你可能感兴趣的文章
8个实用的响应式设计框架
查看>>
Objective-C中的内存管理
查看>>
Docker监控方案(TIG)的研究与实践之Grafana
查看>>
php 通过stomp协议连接ActiveMQ
查看>>
epoll 或者 kqueue 的原理是什么?
查看>>
JNDI数据库连接池的配置
查看>>
How Does Maven Work
查看>>
设计模式六大原则(6):开闭原则
查看>>
《Netty In Action》第二章:第一个Netty程序
查看>>
为什么不需要对独立的jre进行环境变量配置
查看>>
策略模式
查看>>
通过tomcat实现多域名配置
查看>>
JAVA实现环形缓冲多线程读取远程文件
查看>>
#Note# 极客与团队-软件工程师的生存秘笈
查看>>
redis的观察者模式----------发布订阅功能
查看>>
JDBC连接SQLserver2008,使用jdk为1.7 [个人新浪微博]
查看>>
ps、磨皮、修改图片
查看>>
SpringCloud动态刷新配置信息
查看>>
Spring Boot 注册 Servlet 的三种方法,真是太有用了!
查看>>
ThreadLocal 简介
查看>>