在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 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll