细数JDK里的设计模式(转)

2024-03-16 10:08
文章标签 jdk 设计模式 细数

本文主要是介绍细数JDK里的设计模式(转),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

结构型模式:

适配器模式:

用来把一个接口转化成另一个接口。

  • 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()
桥接模式:

这个模式将抽象和抽象操作的实现进行了解耦,这样使得抽象和实现可以独立地变化。

  • AWT (It provides an abstraction layer which maps onto the native OS the windowing support.)
  • JDBC

 

组合模式

使得客户端看来单个对象和对象的组合是同等的。换句话说,某个类型的方法同时也接受自身类型作为参数。

    • javax.swing.JComponent#add(Component)
    • java.awt.Container#add(Component)
    • java.util.Map#putAll(Map)
    • java.util.List#addAll(Collection)
    • java.util.Set#addAll(Collection)

 

装饰者模式:

动态的给一个对象附加额外的功能,这也是子类的一种替代方式。可以看到,在创建一个类型的时候,同时也传入同一类型的对象。这在JDK里随处可见,你会发现它无处不在,所以下面这个列表只是一小部分。

      • java.io.BufferedInputStream(InputStream)
      • java.io.DataInputStream(InputStream)
      • java.io.BufferedOutputStream(OutputStream)
      • java.util.zip.ZipOutputStream(OutputStream)
      • java.util.Collections#checkedList|Map|Set|SortedSet|SortedMap

 

门面模式:

给一组组件,接口,抽象,或者子系统提供一个简单的接口。

      • java.lang.Class
      • javax.faces.webapp.FacesServlet

 

享元模式

使用缓存来加速大量小对象的访问时间。

      • java.lang.Integer#valueOf(int)
      • java.lang.Boolean#valueOf(boolean)
      • java.lang.Byte#valueOf(byte)
      • java.lang.Character#valueOf(char)
代理模式

代理模式是用一个简单的对象来代替一个复杂的或者创建耗时的对象。

      • java.lang.reflect.Proxy
      • RMI

创建模式

抽象工厂模式

抽象工厂模式提供了一个协议来生成一系列的相关或者独立的对象,而不用指定具体对象的类型。它使得应用程序能够和使用的框架的具体实现进行解耦。这在JDK或者许多框架比如Spring中都随处可见。它们也很容易识别,一个创建新对象的方法,返回的却是接口或者抽象类的,就是抽象工厂模式了。

      • java.util.Calendar#getInstance()
      • java.util.Arrays#asList()
      • java.util.ResourceBundle#getBundle()
      • java.sql.DriverManager#getConnection()
      • java.sql.Connection#createStatement()
      • java.sql.Statement#executeQuery()
      • java.text.NumberFormat#getInstance()
      • javax.xml.transform.TransformerFactory#newInstance()
建造模式(Builder)

定义了一个新的类来构建另一个类的实例,以简化复杂对象的创建。建造模式通常也使用方法链接来实现。

      • java.lang.StringBuilder#append()
      • java.lang.StringBuffer#append()
      • java.sql.PreparedStatement
      • javax.swing.GroupLayout.Group#addComponent()
工厂方法

就是一个返回具体对象的方法。

      • java.lang.Proxy#newProxyInstance()
      • java.lang.Object#toString()
      • java.lang.Class#newInstance()
      • java.lang.reflect.Array#newInstance()
      • java.lang.reflect.Constructor#newInstance()
      • java.lang.Boolean#valueOf(String)
      • java.lang.Class#forName()
原型模式

使得类的实例能够生成自身的拷贝。如果创建一个对象的实例非常复杂且耗时时,就可以使用这种模式,而不重新创建一个新的实例,你可以拷贝一个对象并直接修改它。

      • java.lang.Object#clone()
      • java.lang.Cloneable
单例模式

用来确保类只有一个实例。Joshua Bloch在Effetive Java中建议到,还有一种方法就是使用枚举。

      • java.lang.Runtime#getRuntime()
      • java.awt.Toolkit#getDefaultToolkit()
      • java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()
      • java.awt.Desktop#getDesktop()

行为模式

责任链模式

通过把请求从一个对象传递到链条中下一个对象的方式,直到请求被处理完毕,以实现对象间的解耦。

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

将操作封装到对象内,以便存储,传递和返回。

      • java.lang.Runnable
      • javax.swing.Action
解释器模式

这个模式通常定义了一个语言的语法,然后解析相应语法的语句。

      • java.util.Pattern
      • java.text.Normalizer
      • java.text.Format
迭代器模式

提供一个一致的方法来顺序访问集合中的对象,这个方法与底层的集合的具体实现无关。

      • java.util.Iterator
      • java.util.Enumeration
中介者模式

通过使用一个中间对象来进行消息分发以及减少类之间的直接依赖。

      • java.util.Timer
      • java.util.concurrent.Executor#execute()
      • java.util.concurrent.ExecutorService#submit()
      • java.lang.reflect.Method#invoke()
备忘录模式

生成对象状态的一个快照,以便对象可以恢复原始状态而不用暴露自身的内容。Date对象通过自身内部的一个long值来实现备忘录模式。

      • java.util.Date
      • java.io.Serializable
空对象模式

这个模式通过一个无意义的对象来代替没有对象这个状态。它使得你不用额外对空对象进行处理。

      • java.util.Collections#emptyList()
      • java.util.Collections#emptyMap()
      • java.util.Collections#emptySet()
观察者模式

它使得一个对象可以灵活的将消息发送给感兴趣的对象。

      • java.util.EventListener
      • javax.servlet.http.HttpSessionBindingListener
      • javax.servlet.http.HttpSessionAttributeListener
      • javax.faces.event.PhaseListener

 

状态模式

通过改变对象内部的状态,使得你可以在运行时动态改变一个对象的行为。

      • java.util.Iterator
      • javax.faces.lifecycle.LifeCycle#execute()
策略模式

使用这个模式来将一组算法封装成一系列对象。通过传递这些对象可以灵活的改变程序的功能。

      • java.util.Comparator#compare()
      • javax.servlet.http.HttpServlet
      • javax.servlet.Filter#doFilter()
模板方法模式

让子类可以重写方法的一部分,而不是整个重写,你可以控制子类需要重写那些操作。

      • java.util.Collections#sort()
      • java.io.InputStream#skip()
      • java.io.InputStream#read()
      • java.util.AbstractList#indexOf()
访问者模式

提供一个方便的可维护的方式来操作一组对象。它使得你在不改变操作的对象前提下,可以修改或者扩展对象的行为。

      • javax.lang.model.element.Element and javax.lang.model.element.ElementVisitor
      • javax.lang.model.type.TypeMirror and javax.lang.model.type.TypeVisitor

译者注:很多地方可能会存在争议,是否是某种模式其实并不是特别重要,重要的是它们的设计能为改善我们的代码提供一些经验。

这篇关于细数JDK里的设计模式(转)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value)

mac jdk 1.7 dmg 官方版

百度云下载 https://pan.baidu.com/s/1SQiidrPFF5aZr4xlx0ekoQ https://pan.baidu.com/s/1SQiidrPFF5aZr4xlx0ekoQ   补充说明: 实际上oracle对于历史版本的jdk都有归档可以在官方网站上下载,只是需要注册个号就可以了。 地址如下: https://www.oracle.com/cn/java

设计模式之工厂模式(通俗易懂--代码辅助理解【Java版】)

文章目录 1、工厂模式概述1)特点:2)主要角色:3)工作流程:4)优点5)缺点6)适用场景 2、简单工厂模式(静态工厂模式)1) 在简单工厂模式中,有三个主要角色:2) 简单工厂模式的优点包括:3) 简单工厂模式也有一些限制和考虑因素:4) 简单工厂模式适用场景:5) 简单工厂UML类图:6) 代码示例: 3、工厂方法模式1) 在工厂方法模式中,有4个主要角色:2) 工厂方法模式的工作流程

配置Java(JDK)环境变量

一、配置JDK环境变量 将JDK-22压缩包加压缩到指定目录下面,本机路径是:C:\Program Files\Java(可以加压缩到自己的指定路径,记住这个路径,配置环境变量时候要使用)。 鼠标右键“此电脑”,点击“属性”,点击“高级系统设置”,然后进入“环境变量”。 点击“新建”,然后变量名填“JAVA_HOME”,变量值填自己的JDK的下载路径,我这里是“C:\\P

C#设计模式(1)——单例模式(讲解非常清楚)

一、引言 最近在学设计模式的一些内容,主要的参考书籍是《Head First 设计模式》,同时在学习过程中也查看了很多博客园中关于设计模式的一些文章的,在这里记录下我的一些学习笔记,一是为了帮助我更深入地理解设计模式,二同时可以给一些初学设计模式的朋友一些参考。首先我介绍的是设计模式中比较简单的一个模式——单例模式(因为这里只牵涉到一个类) 二、单例模式的介绍 说到单例模式,大家第一

漫谈设计模式 [12]:模板方法模式

引导性开场 菜鸟:老大,我最近在做一个项目,遇到了点麻烦。我们有很多相似的操作流程,但每个流程的细节又有些不同。我写了很多重复的代码,感觉很乱。你有啥好办法吗? 老鸟:嗯,听起来你遇到了典型的代码复用和维护问题。你有没有听说过“模板方法模式”? 菜鸟:模板方法模式?没听过。这是什么? 老鸟:简单来说,模板方法模式让你在一个方法中定义一个算法的骨架,而将一些步骤的实现延迟到子类中。这样,你可

漫谈设计模式 [9]:外观模式

引导性开场 菜鸟:老鸟,我最近在做一个项目,感觉代码越来越复杂,我都快看不懂了。尤其是有好几个子系统,它们之间的调用关系让我头疼。 老鸟:复杂的代码确实让人头疼。你有没有考虑过使用设计模式来简化你的代码结构? 菜鸟:设计模式?我听说过一些,但不太了解。你觉得我应该用哪个模式呢? 老鸟:听起来你的问题可能适合用**外观模式(Facade Pattern)**来解决。我们可以一起探讨一下。

docker学习系列(四)制作基础的base项目镜像--jdk+tomcat

前面已经完成了docker的安装以及使用,现在我们要将自己的javaweb项目与docker结合 1.1准备jdk+tomcat软件 ​​我下载了apache-tomcat-7.0.68.tar.gz和jdk-7u79-linux-x64.tar.gz,存储于Linux机器的本地目录/usr/ect/wt/下(利用xshell上传)。利用linux命令 tar -zxvf apache-tom

设计模式大全和详解,含Python代码例子

若有不理解,可以问一下这几个免费的AI网站 https://ai-to.cn/chathttp://m6z.cn/6arKdNhttp://m6z.cn/6b1quhhttp://m6z.cn/6wVAQGhttp://m6z.cn/63vlPw 下面是设计模式的简要介绍和 Python 代码示例,涵盖主要的创建型、结构型和行为型模式。 一、创建型模式 1. 单例模式 (Singleton