java源码用到的设计模式

Java 中有许多常用的设计模式,它们是为了解决特定问题而被反复使用和验证的经验总结。以下是一些常见的 Java 设计模式:

创建型模式

  1. 工厂模式 (Factory Pattern):

    • 提供一个创建对象的接口,但是由子类决定实例化哪个类。
    • 例如:java.util.Calendar#getInstance()
  2. 抽象工厂模式 (Abstract Factory Pattern):

    • 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。
    • 例如:javax.xml.parsers.DocumentBuilderFactory
  3. 单例模式 (Singleton Pattern):

    • 保证一个类只有一个实例,并提供一个全局访问点。
    • 例如:java.lang.Runtime#getRuntime()
  4. 建造者模式 (Builder Pattern):

    • 将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
    • 例如:java.lang.StringBuilder#append()
  5. 原型模式 (Prototype Pattern):

    • 通过复制现有对象来创建新对象,而不是通过实例化。

结构型模式

  1. 适配器模式 (Adapter Pattern):

    • 将一个类的接口转换成客户希望的另一个接口。
    • 例如:java.util.Arrays#asList()
  2. 桥接模式 (Bridge Pattern):

    • 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
    • 例如:java.sql.DriverManager
  3. 组合模式 (Composite Pattern):

    • 将对象组合成树形结构以表示"部分-整体"的层次结构。
    • 例如:java.awt.Container 和 javax.swing.JComponent
  4. 装饰者模式 (Decorator Pattern):

    • 动态地给一个对象添加一些额外的职责,而不改变其结构。
    • 例如:java.io.BufferedInputStream
  5. 外观模式 (Facade Pattern):

    • 为子系统中的一组接口提供一个一致的界面。
    • 例如:javax.faces.context.FacesContext
  6. 享元模式 (Flyweight Pattern):

    • 通过共享技术来有效地支持大量细粒度的对象。
    • 例如:java.lang.Integer#valueOf(int)
  7. 代理模式 (Proxy Pattern):

    • 为其他对象提供一种代理以控制对这个对象的访问。
    • 例如:java.lang.reflect.Proxy

行为型模式

  1. 责任链模式 (Chain of Responsibility Pattern):

    • 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
    • 例如:java.util.logging.Logger#log()
  2. 命令模式 (Command Pattern):

    • 将请求封装成一个对象,从而使用户可以用不同的请求对客户进行参数化。
    • 例如:java.lang.Runnable
  3. 解释器模式 (Interpreter Pattern):

    • 给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
    • 例如:java.util.Pattern
  4. 迭代器模式 (Iterator Pattern):

    • 提供一种方法顺序访问一个聚合对象中各个元素,而不暴露其内部的表示。
    • 例如:java.util.Iterator 和 java.util.Enumeration
  5. 中介者模式 (Mediator Pattern):

    • 用一个中介对象来封装一系列的对象交互。
    • 例如:java.util.Timer
  6. 备忘录模式 (Memento Pattern):

    • 在不破坏封装的情况下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
    • 例如:java.util.Calendar
  7. 观察者模式 (Observer Pattern):

    • 定义了一种一对多的依赖关系,使得当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。
    • 例如:java.util.Observer 和 java.util.Observable
  8. 状态模式 (State Pattern):

    • 允许一个对象在其内部状态改变时改变其行为。
    • 例如:javax.faces.lifecycle.Lifecycle#execute()
  9. 策略模式 (Strategy Pattern):

    • 定义一系列算法,将每个算法都封装起来,并使它们之间可以互换。
    • 例如:java.util.Comparator
  10. 模板方法模式 (Template Method Pattern):

  • 定义一个算法的骨架,将一些步骤延迟到子类中。
  • 例如:java.util.Collections#sort()
  1. 访问者模式 (Visitor Pattern):
  • 表示一个作用于某对象结构中的各元素的操作,它使你可以定义新的操作而无需改变这些元素的类。
  • 例如:javax.lang.model.element.ElementVisitor

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/142590.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

产品的生命周期

** 没错,产品每次版本选代都是一次重生的机会,每次版本迭代都不亚于一次产品上线首发。 ** 一、产品上线首发 所谓万事开头难,产品上线首发的重要性不言而喻,产品给人的第一印象非常深刻,后期再去扭转非常困难&#…

GORM学习笔记

GORM学习笔记 官方文档:https://gorm.io/zh_CN/docs/ 1、数据准备 create table student (id int auto_incrementprimary key,sn varchar(20) null,name varchar(20) null,email varchar(20) null,class_id int null,monitor…

【第2章 Node.js基础】2.5 Node.js 的定时器

定时器timers 模块对外暴露一个全局的API用于调度在某个时段调用的函数因为定时器函数是全局变量,所以不需要加载timers 模块来使用它。Node.s 的定时器函敬实现了与 Web 浏览器提供的定时器 API 类似的 AP,但是它们使用了不同的内部实现机制&#xff0c…

腾讯云4核8G和2核4G服务器五年优惠价格表

腾讯云百科整理五年云服务器优惠活动 txybk.com/go/txy 配置可选2核4G和4核8G,公网带宽可选1M、3M或5M,系统盘为50G高性能云硬盘,标准型S5实例CPU采用主频2.5GHz的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器,睿频3…

The 8th China Open Source Conference Successfully Concludes

由开源社主办的第八届中国开源年会(COSCon23)于 2023年10月29日在成都圆满收官。本次大会,为期两天,线下参会报名逾千人次,在线直播观看人数总计 168610 人,直播观看次数达 248725 次,官网累计浏…

LeetCode【238】除自身意外的数组的乘积

题目&#xff1a; 思路&#xff1a; https://zhuanlan.zhihu.com/p/109306706?utm_id0 代码&#xff1a; int n nums.length;int[] l new int[nums.length];int[] r new int[nums.length];l[0] 1;r[n-1] 1;for (int i1;i<nums.length;i) {l[i] l[i-1] * nums[i-1]…

使用字典树实现一个可以自动补全的输入框

说在前面 平时我们在终端输入命令的时候是不是都可以通过tab键来进行快速补全&#xff1f;那么有没有想过怎么去实现这个自动补全的功能呢&#xff1f;今天让我们一起来使用字典树实现一个可以自动补全的输入框。 效果展示 体验地址 http://jyeontu.xyz/jvuewheel/#/JAutoComp…

【C++】替代--whole-archive的一种方式

上篇文章《C自动注册的工厂与--whole-archive》提到了--whole-archive选项在自动工厂示例的必要&#xff0c;“貌似也没其他方法了”。 这篇文章介绍另一种可以替代的方式&#xff0c;并分析其优缺点&#xff0c;采用的代码示例同上篇文章。文章最后附代码。 方法介绍 ld链接器…

Python+Qt多点最短路径(最优路径)算法实现

程序示例精选 PythonQt多点最短路径(最优路径)算法实现 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PythonQt多点最短路径(最优路径)算法实现》编写代码&#xff0c;代码整洁&#xff0…

Qt执行带参sql

//准备执行的sql语句&#xff0c;此为带参的sql语句query.prepare("update employee set Name:Name, Gender:Gender,Height:Height,"" Birthday:Birthday, Mobile:Mobile, Province:Province,"" City:City, Department:Department, Education:Educati…

Android 透明度设置

目录 一、透明度对照表 二、透明度介绍 三、透明度设置 3.1 xml设置 3.2 代码设置 一、透明度对照表 注&#xff1a;00是完全透明&#xff0c;FF就是完全不透明 我们的UI小姐姐就喜欢给「不透明度」&#xff0c;这个需要自己判断一下。 完全透明:0% HEX: 00 透明度:1%…

MR混合现实情景实训教学系统模拟历史情景

二、应用场景 1. 古代战争场景&#xff1a;通过MR混合现实情景实训教学系统&#xff0c;学生可以亲身体验古代战争的场景&#xff0c;如战场布置、战术运用等。这不仅有助于学生更好地理解古代战争的特点&#xff0c;还能够培养他们的团队协作和战略思维能力。 2. 历史文化古…

SparkSQL数据的加载与保存

1 读取和保存文件 SparkSQL读取和保存的文件一般为三种&#xff0c;JSON文件、CSV文件和列式存储的文件&#xff0c;同时可以通过添加参数&#xff0c;来识别不同的存储和压缩格式。 1.1 CSV文件 1&#xff09;代码实现 package com.atguigu.sparksql; import com.atguigu.spar…

vscode+python开发之虚拟环境和解释器切换

需求情景&#xff1a; 现在我们要开发多个项目比如&#xff1a;项目A&#xff0c;项目B、项目C&#xff0c;他们每个项目需要依赖不同的库。每个项目依赖的解释器也不一样怎么办&#xff1f; 项目A&#xff1a;需要在python3.7环境运行 依赖aadd3.2库 项目B、需要在python3.11…

C/C++轻量级并发TCP服务器框架Zinx-框架开发001: 读取标准输入,回显到标准输出

文章目录 完整代码实现参考-非项目使用项目使用的代码 - 乱-但是思路与上面的相同创建Kernel类添加删除修改epoll&#xff0c;才能写run方法创建stdin_Channel类在Kernel类中实现run方法 完整代码实现参考-非项目使用 #include <errno.h> #include <signal.h> #in…

2024上海国际智能驾驶技术展览会(自动驾驶展)

2024上海国际智能驾驶技术展览会 2024 Shanghai International Autonomous driving Expo 时间&#xff1a;2024年3月26-28日 地点&#xff1a;上海跨国采购会展中心 随着科技的飞速发展&#xff0c;智能驾驶已经成为了汽车行业的重要趋势。在这个时代背景下&#xff0c;汽车不…

Ansys Lumerical | 用于增强现实系统的表面浮雕光栅

在本示例中&#xff0c;我们使用 RCWA 求解器设计了一个斜面浮雕光栅 (SRG)&#xff0c;它将用于将光线耦合到单色增强现实 (AR) 系统的波导中。光栅的几何形状经过优化&#xff0c;可将正常入射光导入-1 光栅阶次。 然后我们将光栅特性导出为 Lumerical Sub-Wavelength Model …

数字媒体技术基础之:常见图片文件格式

在数字图像处理和图形设计领域&#xff0c;了解不同的图片文件格式及其特点是至关重要的。每种格式都有其独特的用途和优势。以下介绍一些最常见的图片文件格式。 JPEG Joint Photographic Experts Group 扩展名&#xff1a;.jpg 或 .jpeg 特点&#xff1a; 1、有损压缩&#x…

【Proteus仿真】【51单片机】拔河游戏设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、动态数码管模块等。 主要功能&#xff1a; 系统运行后&#xff0c;指示灯处于中间位置&#xff0c;数码管显示得分0&#xff0c;当按下…

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件

20231114在HP笔记本的ubuntu20.04系统下向RealmeQ手机发送PDF文件 2023/11/14 14:11 手机&#xff1a;Realme Q 笔记本电脑&#xff1a;HP https://item.jd.com/100012583174.html 惠普&#xff08;HP&#xff09;战66 三代AMD版 14英寸轻薄笔记本电脑&#xff08;锐龙7nm 六核…