JDK里的设计模式

细数JDK里的设计模式 抽象工厂模式提供了一个协议来生成一系列的相关或者独立的对象,而不用指定具体对象的类型。它们也很容易识别,一个创建新对象的方法,返回的却是接口或者抽象类的,就是抽象工厂模式了。如果创建一个对象的实例非常复杂且耗时时,就可以使用这种模式,而不重新创建一个新的实例,你可以拷贝一个对象并直接修改它。使得客户端看来单个对象和对象的组合是同等的。通过把请求从一个对象传递到链条中下一个对象的方式,直到请求被处理完毕,以实现对象间的解耦。提供一个一致的方法来顺序访问集合中的对象,这个方法与底层的集合的具体实现无关。 阅读详情

 

Structural(结构模式)


Adapter:

把一个接口或是类变成另外一种。

• 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()

 

Bridge:

把抽象和实现解藕,于是接口和实现可在完全独立开来。

• AWT (提供了抽象层映射于实际的操作系统)

• JDBC

 

Composite:

让使用者把单独的对象和组合对象混用。

• 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)

 

Decorator:

为一个对象动态的加上一系列的动作,而不需要因为这些动作的不同而产生大量的继承类。这个模式在JDK中几

乎无处不在,所以,下面的列表只是一些典型的。

 

• java.io.BufferedInputStream(InputStream)

• java.io.DataInputStream(InputStream)

• java.io.BufferedOutputStream(OutputStream)

• java.util.zip.ZipOutputStream(OutputStream)

• java.util.Collections#checked[List|Map|Set|SortedSet|SortedMap]()

 

Facade:

用一个简单的接口包状一组组件,接口,抽象或是子系统。

• java.lang.Class

• javax.faces.webapp.FacesServlet

 

Flyweight:

有效率地存储大量的小的对象。

• java.lang.Integer#valueOf(int)

• java.lang.Boolean#valueOf(boolean)

• java.lang.Byte#valueOf(byte)

• java.lang.Character#valueOf(char)

 

Proxy:

用一个简单的对象来代替一个复杂的对象。

• java.lang.reflect.Proxy

• RMI

 

Creational(创建模式)


Abstract factory:

创建一组有关联的对象实例。这个模式在JDK中也是相当的常见,还有很多的framework例如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:

主要用来简化一个复杂的对象的创建。这个模式也可以用来实现一个Fluent Interface。

• java.lang.StringBuilder#append()

• java.lang.StringBuffer#append()

• java.sql.PreparedStatement

• javax.swing.GroupLayout.Group#addComponent()

Factory:

简单来说,按照需求返回一个类型的实例。

• 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()

 

Prototype:

使用自己的实例创建另一个实例。有时候,创建一个实例然后再把已有实例的值拷贝过去,是一个很复杂的动

作。所以,使用这个模式可以避免这样的复杂性。

• java.lang.Object#clone()

• java.lang.Cloneable

 

Singleton:

只允许一个实例。在 Effective Java中建议使用Emun.

• java.lang.Runtime#getRuntime()

• java.awt.Toolkit#getDefaultToolkit()

• java.awt.GraphicsEnvironment#getLocalGraphicsEnvironment()

• java.awt.Desktop#getDesktop()

 

Behavioral(行为模式)


Chain of responsibility:

把一个对象在一个链接传递直到被处理。在这个链上的所有的对象有相同的接口(抽象类)但却有不同的实

现。

• java.util.logging.Logger#log()

 

• javax.servlet.Filter#doFilter()

 

Command:

把一个或一些命令封装到一个对象中。

• java.lang.Runnable

• javax.swing.Action

 

Interpreter:

一个语法解释器的模式。

• java.util.Pattern

• java.text.Normalizer

• java.text.Format

 

Iterator:

提供一种一致的方法来顺序遍历一个容器中的所有元素。

• java.util.Iterator

• java.util.Enumeration

 

Mediator:

用来减少对象单的直接通讯的依赖关系。使用一个中间类来管理消息的方向。

• java.util.Timer

• java.util.concurrent.Executor#execute()

• java.util.concurrent.ExecutorService#submit()

• java.lang.reflect.Method#invoke()

 

Memento:

给一个对象的状态做一个快照。Date类在内部使用了一个long型来做这个快照。

• java.util.Date

• java.io.Serializable

 

Null Object:

这个模式用来解决如果一个Collection中没有元素的情况。

• java.util.Collections#emptyList()

• java.util.Collections#emptyMap()

• java.util.Collections#emptySet()

 

Observer:

允许一个对象向所有的侦听的对象广播自己的消息或事件。

• java.util.EventListener

• javax.servlet.http.HttpSessionBindingListener

• javax.servlet.http.HttpSessionAttributeListener

• javax.faces.event.PhaseListener

 

State:

这个模式允许你可以在运行时很容易地根据自身内部的状态改变对象的行为。

• java.util.Iterator

• javax.faces.lifecycle.LifeCycle#execute()

 

Strategy:

定义一组算法,并把其封装到一个对象中。然后在运行时,可以灵活的使用其中的一个算法。

• java.util.Comparator#compare()

• javax.servlet.http.HttpServlet

• javax.servlet.Filter#doFilter()

 

Template method:

允许子类重载部分父类而不需要完全重写。

• java.util.Collections#sort()

• java.io.InputStream#skip()

• java.io.InputStream#read()

• java.util.AbstractList#indexOf()

 

Visitor:

作用于某个对象群中各个对象的操作. 它可以使你在不改变这些对象本身的情况下,定义作用于这些对象的新操

作.

• javax.lang.model.element.Element 和javax.lang.model.element.ElementVisitor

• javax.lang.model.type.TypeMirror 和javax.lang.model.type.TypeVisitor

 

 

 

 

 

SAP中错记虚拟利润中心的调整,冲销处理实例 我非CO专业顾问。工作中遇到的问题,也会找资料,分析,测试。有时这个过程会拿到结果,解决问题。遂将过程记录下来备查。读者请谨慎参考!EC-PCA: 利润中心记账流程_9ke0-优快云博客。 阅读详情

相关推荐

零基础用AHK操作Excel:从数据读取到自动填写(附完整脚本解析)

本文为零基础用户详细介绍了如何使用AutoHotkey(AHK)通过COM接口高效操作Excel,实现从数据自动读取到填写的完整自动化流程。文章包含完整的脚本解析、环境搭建指南、核心代码逐行讲解以及实际应用案例,帮助办公人员大幅提升数据处理效率,告别重复劳动。

weixin_29202213的博客 552

Java中JDK里用到了哪些设计模式?让面试官眼前一亮!!

本文主要介绍了Java中JDK里面常用的设计模式:适配器模式、桥接模式、组合模式、装饰者模式以及抽象工厂模式等等...

weixin_49562392的博客 401

Windows 2012 SYSVOL复制失败的处理

题外话:晓原理、知架构、查日志是排错的三件法宝今天在DC1上新建并链接了一个组策略对像,在客户端刷新时,却报下面的错误:“处理组策略失败。Windows无法应用组策略对象LDAP….”如下图所示:于是在客户端用\\domain.com访问,发现\\domain.com\SYSVOL\domain.com\policies下面没有上面报错的组策略对象。这是怎么一回事呢,pin...

weixin_33989780的博客 1667

什么是设计模式?JDK里用到哪些设计模式?

设计模式是软件开发中用于解决常见问题的标准化解决方案模板,旨在构建高内聚、低耦合、可扩展和可维护的系统。设计模式分为创建型、结构型和行为型三大类,共23种。创建型模式如单例、工厂和建造者,负责对象创建逻辑;结构型模式如适配器、装饰器和代理,解决类或对象之间的组合问题;行为型模式如策略、观察者和迭代器,关注对象之间的通信与职责划分。在JDK和常用框架中,设计模式被广泛应用,例如单例模式在Runtime类中,工厂模式在Calendar类中,策略模式在Comparator接口中,代理模式在Spring AOP中。

weixin_46072507的博客 924

ThingsBoard - 设备接入

设备接入笔记

qq_53839898的博客 1454

MuMu模拟器过检测实战:从硬件伪装到API欺骗的完整避坑指南

本文详细介绍了MuMu模拟器过检测的实战技术,从硬件伪装到API欺骗的全方位解决方案。通过修改CPU/GPU信息、内存分布、系统属性和行为模拟等关键技术,帮助用户有效绕过现代应用的模拟器检测机制,提升模拟器的隐蔽性和稳定性。

xxx12的博客 1384

NXP RT700低功耗Edge AI语音方案实战指南

边缘AI语音交互是智能穿戴设备的核心能力,其本质是在极小体积与超低功耗约束下,实现毫秒级关键词唤醒与本地指令理解。原理上依赖专用硬件加速(如DSP核+Always-On域)、端到端信号链优化(PDM接口+硬件降噪)及INT8量化模型部署。技术价值在于突破云端依赖、网络延迟与电池寿命三重瓶颈,支撑全天候‘真离线’语音体验。典型应用于TWS耳机、智能手表、运动手环等对功耗敏感的嵌入式终端。本文聚焦NXP RT700芯片,深入解析其15μA常驻监听、双域供电架构与eIQ Nano引擎在真实量产场景中的落地路径。

WGH100817的博客 248

手把手教你用P-MOS管搭建双电源自动切换电路(含AO3401选型指南)

本文提供了一份基于P-MOS管AO3401构建高可靠双电源自动切换电路的实战指南。文章详细对比了继电器、理想二极管与MOS管方案的优劣,深入解析了AO3401的关键参数选型,并手把手指导了从原理图设计、PCB布局到上电调试的全过程,旨在帮助硬件工程师和创客以极低成本实现无缝、高效的电源冗余方案。

moss5的博客 1228

如何学习JDK里的设计模式

前言 最近在看JDK源码,想在毕业前再好好提高一下写代码的能力,JDK是个优秀的源码阅读范本(Spring的源码也不错)。JDK目录下的src.zip里可以直接获得源码,我也push到了我Github的一个repo里。 网上搜了JDK设计模式,coolshell里也有一篇,不过我还是参照了Stackoverflow(原文链接)上的一个“Examples of GoF Design

张包峰的博客 2859

STM32开发笔记85: SX1268驱动程序设计(芯片唤醒)

单片机型号:STM32L053R8T6 本系列开发日志,将详述SX1268驱动程序的整个设计过程,本篇介绍芯片唤醒驱动程序。 一、RxDutyCycle模式 在讲述本篇内容之前,我们先来看一下SX1268的一种模式RxDutyCycle,译为中文为接收占空比模式。其可使用SetRxDutyCycle命令进入RxDutyCycle模式,我们来看一下该命令的详细解释。 该命令具有2个参数,...

snmplink的博客 4065

国科大作业考试资料《人工智能原理与算法》2024新编-第二次作业整理

1、对于下列活动,分别给出任务环境的PEAS描述, 并按2.3.2节列出的性质进行分析: 3、为图2.2中描述的吸尘器世界实现一个可以进行性能度量的环境模拟器。你的实现是必须是模块化的,以使传感器、执行器和环境特征(大小、形状、灰尘放置等)便于修改。 4、实现上述题目真空吸尘器环境中的简单反射Agent。用所有可能的初始灰尘分布和Agent位置,运行环境模拟器和Agent。记录Agent在每种情况下的性能评分和总体平均评分。

MatsumotoChrikk 1187

BBEdit v16.0.3实测:macOS上轻量原生编辑器的专业之选

在macOS上写代码,你是否常被Electron架构编辑器的高内存占用拖慢节奏?明明只是改几行配置,VS Code却能吃掉数GB内存。其实,问题根源在于架构:每个Electron窗口都自带浏览器内核,资源开销巨大。而原生应用则直接调用系统API,轻快省电。BBEdit作为一款历经三十年打磨的macOS原生编辑器,凭借秒开启动、低内存占用和强大的正则表达式引擎,成为轻量编辑与文本处理领域的专业工具。它内置多文件查找替换、文本工厂批处理、SFTP远程编辑等硬核功能,不靠插件堆砌,覆盖从快速改码到批量处理日志的多

weixin_30595035的博客 382

基于YOLOv11的无人机目标检测系统:实现drone、bird、aircraft多类别识别

采用改进的YOLOv11网络结构,平衡检测精度和速度融合VisDrone和UAVDT数据集,增强模型泛化能力设计多尺度特征融合模块,提升小目标检测性能开发直观的UI界面,便于实际部署和应用。

YOLO 322
上一篇: 英语常用句型(下)
下一篇: Flex 加载资源方式
terryzero
博客等级 码龄19年 700粉丝 232原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值