Java源码里的设计模式

标签 IT工具网 java

维基百科 中,可以让你对大部分设计模式有一个概览,而且它也指出了哪些设计模式是 GoF 中规范.下面列出可以从 JavaSE 和 JavaEE API 中找到的设计模式:

创建型模式

抽象工厂

建造者模式

工厂模式

原型模式

单例模式

结构型模式

适配器模式

桥模式

暂时没有发现

合成模式

装饰模式

门面模式

javax.faces.context.FacesContext,其内部使用了 LifeCycle, ViewHandler, NavigationHandler 等接口或抽象类,没有这一个门面类,终端就需要考虑如何去使用接口或抽象类(实际上不需要,因为门面类通过反射完成了) javax.faces.context.ExternalContext, 其内部使用了 ServletContext, HttpSession, HttpServletRequest, HttpServletResponse

享元模式

代理模式

表现型模式

责任链模式

命令模式

解释器模式

迭代模式

中介模式

备忘录模式

java.util.Date(setXXX 方法更新的就是其内部的 Date 的值) java.io.Serializable 的所有实现 javax.faces.component.StateHolder 的所有实现

观察者模式(订阅模式)

java.util.Observer/java.util.Observable(实际应用中,很少会用到) java.util.EventListener 的所有实现(几乎包含了所有 Swing 中使用到的类) javax.servlet.http.HttpSessionBindingListener javax.servlet.http.HttpSessionAttributeListener javax.faces.event.PhaseListener

状态模式

javax.faces.lifecycle.LifeCycle#execute()(由FacesServlet控制,行为是依赖于当前JSF生命周期阶段(状态))

策略模式

java.util.Comparator#compare(), 在 Collections#sort() 中会使用到. javax.servlet.http.HttpServlet,service() 和 所有 doXXX() 方法都以 HttpServletRequest 和 HttpServletResponse 作为参数,所有方法的实现都需要显式处理这两个参数(而不是持有这个变量。) javax.servlet.Filter#doFilter()

模板模式

java.io.InputStream, java.io.OutputStream, java.io.Readerjava.io.Writer 的所有 非抽象 方法。 java.util.AbstractList, java.util.AbstractSetjava.util.AbstractMap 的所有 非抽象 方法。

javax.servlet.http.HttpServlet 中 doXXX() 方法,这些方法默认返回 405 “Method Not Allowed” ,你可以自由地选择覆盖实现其中的一个或多个。

访问者模式

javax.lang.model.element.AnnotationValueAnnotationValueVisitor javax.lang.model.element.ElementElementVisitor javax.lang.model.type.TypeMirrorTypeVisitor java.nio.file.FileVisitorSimpleFileVisitor

附录拓展:

相关文章:

加载JNI共享库失败(JDK)

java - 如何将文本文件读入数组列表,排除包含某些单词的行?

java如何用一行代码初始化一个ArrayList

什么在java中存放密码更倾向于char[]而不是String

如何使用Java创建一个内存泄漏的程序

为Eclipse自动代码格式化设置行的最大长度?

java - 在非集合中使用泛型

java - 从 Java SE 6 开始,Sun 的 JVM 的默认最大堆大小是多少?

java - Java同时显示繁体中文和简体中文

java - Intellij Idea 2.5版本无法创建Web应用程序?