在Java 核心类库中关于GOF设计模式的例子

2024-03-13 03:58

本文主要是介绍在Java 核心类库中关于GOF设计模式的例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文地址:http://blog.csdn.net/jiangkai528/article/details/45195915

在Java 核心类库中关于GOF设计模式的例子

问题:   我正在学习GOF的java 设计模式,我想找一些它们中鲜活的例子,在java 核心类库中有哪些好的例子呢?

回答:你可以在维基百科上获得许多设计模式概述。同时也会提到哪些是由GOF提出的。在这里我总结一下,我尽可能多的从java SE 和java EE 的 API 中选取一些设计模式的实现

1.抽象工厂模式 (abstract factory)

  • 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,FloatBufferand DoubleBuffer)
  • javax.swing.GroupLayout.Group#addComponent()
  •  java.lang.Appendable 的所有实现类
3. 工厂方法模式(factory method)

  • java.util.Calendar#getInstance()
  • java.util.ResourceBundle#getBundle()
  • java.text.NumberFormat#getInstance()
  • java.nio.charset.Charset#forName()
  • java.net.URLStreamHandlerFactory#createURLStreamHandler(String) (每次协议返回单个对象)
4. 原型模式(prototype)

  • java.lang.Object#clone() (这个类必须实现 java.lang.Cloneable  接口)
5.单例模式 (singleton)

  • java.lang.Runtime#getRuntime()
  • java.awt.Desktop#getDesktop()
6.适配器模式(adapter)

  • java.util.Arrays#asList()
  • java.io.InputStreamReader(InputStream) (returns aReader)
  • java.io.OutputStreamWriter(OutputStream) (returns aWriter)
  • javax.xml.bind.annotation.adapters.XmlAdapter#marshal() and#unmarshal()
7. 桥接模式(bridge)

None comes to mind yet. A fictive example would be new LinkedHashMap(LinkedHashSet<K>, List<V>) which returns an unmodifiable linked map which doesn't clone the items, butuses them. Thejava.util.Collections#newSetFromMap() and singletonXXX() methods however comes close.

8.组合模式(composite)

  • java.awt.Container#add(Component) (practically all over Swing thus)
  • javax.faces.component.UIComponent#getChildren() (practically all over JSF UI thus)
9.装饰模式(decorator)

  • All subclasses of java.io.InputStreamOutputStreamReader and Writer have a constructor taking an instance of same type.
  • java.util.Collections, thecheckedXXX(),synchronizedXXX() and unmodifiableXXX() methods.
  • javax.servlet.http.HttpServletRequestWrapper andHttpServletResponseWrapper

10.外观模式(facade)

  • javax.faces.context.FacesContext, it internally uses among others the abstract/interface typesLifeCycle,ViewHandler,NavigationHandler and many more without that the enduser has to worry about it (which are however overrideable by injection).
  • javax.faces.context.ExternalContext, which internally usesServletContext,HttpSession,HttpServletRequest,HttpServletResponse, etc.
11.享元模式(flyweight)

java.lang.Integer#valueOf(int) (同时还有Boolean,Byte,Character,Short and Long)


12.代理模式(proxy)

  • java.lang.reflect.Proxy
  • java.rmi.*, 整个API
13. 职责链模式(chain of responsibility)

  • java.util.logging.Logger#log()
  • javax.servlet.Filter#doFilter()
14. 命令模式(command)

  • All implementations of java.lang.Runnable
  • All implementations of javax.swing.Action

15. 解析器模式(interpreter)

  • java.util.Pattern
  • java.text.Normalizer
  • All subclasses of java.text.Format
  • All subclasses of javax.el.ELResolver

16. 迭代器模式 (iterator)

  • All implementations of java.util.Iterator (thus among others also java.util.Scanner!).
  • All implementations of java.util.Enumeration
17. 中介者模式 (mediator)

  • java.util.Timer (allscheduleXXX() methods)
  • java.util.concurrent.Executor#execute()
  • java.util.concurrent.ExecutorService (theinvokeXXX() andsubmit() methods)
  • java.util.concurrent.ScheduledExecutorService (allscheduleXXX() methods)
  • java.lang.reflect.Method#invoke()

18.备忘录模式(memento)

  • java.util.Date (the setter methods do that,Date is internally represented by along value)
  • All implementations of java.io.Serializable
  • All implementations of javax.faces.component.StateHolder
19. 观察者模式(observer)

  • java.util.Observer/java.util.Observable (rarely used in real world though)
  • All implementations of java.util.EventListener (practically all over Swing thus)
  • javax.servlet.http.HttpSessionBindingListener
  • javax.servlet.http.HttpSessionAttributeListener
  • javax.faces.event.PhaseListener
20.状态模式(state)

javax.faces.lifecycle.LifeCycle#execute()

(controlled by FacesServlet, the behaviour is dependent on current phase (state) of JSF lifecycle)


21.策略模式(strategy)

  • java.util.Comparator#compare(), executed by among othersCollections#sort().
  • javax.servlet.http.HttpServlet, theservice() and alldoXXX() methods takeHttpServletRequestandHttpServletResponse and the implementor has to process them (and not to get hold of them as instance variables!).
  • javax.servlet.Filter#doFilter()

22. 模板方法模式(template method)

  • All non-abstract methods of java.io.InputStreamjava.io.OutputStreamjava.io.Reader and java.io.Writer.
  • All non-abstract methods of java.util.AbstractListjava.util.AbstractSet and java.util.AbstractMap.
  • javax.servlet.http.HttpServlet, all thedoXXX() methods by default sends a HTTP 405 "Method Not Allowed" error to the response. You're free to implement none or any of them.
23. 访问者模式(visitor)

  • javax.lang.model.element.AnnotationValue andAnnotationValueVisitor
  • javax.lang.model.element.Element andElementVisitor
  • javax.lang.model.type.TypeMirror andTypeVisitor


这篇关于在Java 核心类库中关于GOF设计模式的例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/803576

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S