Java 源码里的设计模式

大约 4 分钟

Java 源码里的设计模式

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

创建型模式open in new window

抽象工厂open in new window

建造者模式open in new window

工厂模式open in new window

原型模式open in new window

单例模式open in new window

结构型模式open in new window

适配器模式open in new window

桥模式open in new window

暂时没有发现

合成模式open in new window

装饰模式open in new window

门面模式open in new window

javax.faces.context.FacesContextopen in new window,其内部使用了 LifeCycleopen in new window, ViewHandleropen in new window, NavigationHandleropen in new window 等接口或抽象类,没有这一个门面类,终端就需要考虑如何去使用接口或抽象类(实际上不需要,因为门面类通过反射完成了) javax.faces.context.ExternalContextopen in new window, 其内部使用了 ServletContextopen in new window, HttpSessionopen in new window, HttpServletRequestopen in new window, HttpServletResponseopen in new window

享元模式open in new window

代理模式open in new window

表现型模式open in new window

责任链模式open in new window

命令模式open in new window

解释器模式open in new window

迭代模式open in new window

中介模式open in new window

备忘录模式open in new window

java.util.Dateopen in new window(setXXX 方法更新的就是其内部的 Date 的值) java.io.Serializable 的所有实现open in new windowjavax.faces.component.StateHolder 的所有实现open in new window

观察者模式(订阅模式)open in new window

java.util.Observeropen in new window/java.util.Observableopen in new window(实际应用中,很少会用到) java.util.EventListener 的所有实现open in new window(几乎包含了所有 Swing 中使用到的类) javax.servlet.http.HttpSessionBindingListeneropen in new windowjavax.servlet.http.HttpSessionAttributeListeneropen in new windowjavax.faces.event.PhaseListeneropen in new window

状态模式open in new window

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

策略模式open in new window

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

模板模式open in new window

java.io.InputStreamopen in new window, java.io.OutputStreamopen in new window, java.io.Readeropen in new windowjava.io.Writeropen in new window 的所有 非抽象 方法。 java.util.AbstractListopen in new window, java.util.AbstractSetopen in new windowjava.util.AbstractMapopen in new window 的所有 非抽象 方法。

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

访问者模式open in new window

javax.lang.model.element.AnnotationValueopen in new windowAnnotationValueVisitoropen in new windowjavax.lang.model.element.Elementopen in new windowElementVisitoropen in new windowjavax.lang.model.type.TypeMirroropen in new windowTypeVisitoropen in new windowjava.nio.file.FileVisitoropen in new windowSimpleFileVisitoropen in new window

附录拓展: