一句话概括JAVA中的23种设计模式

news2024/9/28 19:17:00

Java 中的 23 种设计模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns)。下面是每种模式的简要说明:

创建型模式(Creational Patterns)

  1. 单例模式(Singleton Pattern)

    • 说明:确保一个类只有一个实例,并提供一个全局访问点。
    • 示例:数据库连接池、日志记录器。
  2. 工厂方法模式(Factory Method Pattern)

    • 说明:定义一个用于创建对象的接口,但让子类决定实例化哪一个类。
    • 示例:日志记录器的不同实现。
  3. 抽象工厂模式(Abstract Factory Pattern)

    • 说明:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
    • 示例:GUI 工具包(Windows、Mac)。
  4. 建造者模式(Builder Pattern)

    • 说明:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
    • 示例:复杂的对象创建,如 HTML 文档生成器。
  5. 原型模式(Prototype Pattern)

    • 说明:通过复制现有实例来创建新实例,而不是通过常规构造函数。
    • 示例:缓存机制、克隆对象。

结构型模式(Structural Patterns)

  1. 适配器模式(Adapter Pattern)

    • 说明:将一个类的接口转换成客户希望的另一个接口,使原本因接口不兼容而不能一起工作的那些类可以一起工作。
    • 示例:不同数据库驱动的适配。
  2. 桥接模式(Bridge Pattern)

    • 说明:将抽象部分与实现部分分离,使它们可以独立变化。
    • 示例:图形绘制库与具体绘图实现分离。
  3. 组合模式(Composite Pattern)

    • 说明:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
    • 示例:文件系统中的文件和目录。
  4. 装饰模式(Decorator Pattern)

    • 说明:动态地给一个对象添加一些额外的职责,而不改变其接口。
    • 示例:输入输出流的包装类。
  5. 外观模式(Facade Pattern)

    • 说明:为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。
    • 示例:复杂的子系统简化接口。
  6. 享元模式(Flyweight Pattern)

    • 说明:通过共享技术来有效地支持大量细粒度的对象。
    • 示例:文本编辑器中的字符对象。
  7. 代理模式(Proxy Pattern)

    • 说明:为其他对象提供一种代理以控制对这个对象的访问。
    • 示例:远程代理、虚拟代理、保护代理。

行为型模式(Behavioral Patterns)

  1. 策略模式(Strategy Pattern)

    • 说明:定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换。
    • 示例:排序算法的选择。
  2. 观察者模式(Observer Pattern)

    • 说明:定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
    • 示例:事件监听机制。
  3. 命令模式(Command Pattern)

    • 说明:将请求封装成对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
    • 示例:GUI 控件的命令处理。
  4. 责任链模式(Chain of Responsibility Pattern)

    • 说明:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
    • 示例:异常处理链。
  5. 状态模式(State Pattern)

    • 说明:允许一个对象在其内部状态改变时改变它的行为,对象看起来好像修改了它的类。
    • 示例:有限状态机。
  6. 访问者模式(Visitor Pattern)

    • 说明:表示一个作用于某对象结构中的各元素的操作。它使你可以在不修改各元素类的前提下定义作用于这些元素的新操作。
    • 示例:遍历抽象语法树。
  7. 中介者模式(Mediator Pattern)

    • 说明:用一个中介对象来封装一系列的对象交互,使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
    • 示例:聊天室中的消息传递。
  8. 迭代器模式(Iterator Pattern)

    • 说明:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
    • 示例:集合框架中的迭代器。
  9. 备忘录模式(Memento Pattern)

    • 说明:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。
    • 示例:游戏中的存档和读档。
  10. 解释器模式(Interpreter Pattern)

    • 说明:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
    • 示例:简单的表达式求值。
  11. 模板方法模式(Template Method Pattern)

    • 说明:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
    • 示例:JDBC 模板方法。

这些设计模式可以帮助你在开发过程中解决常见的设计问题,提高代码的可维护性和扩展性。希望这些简要说明对你有所帮助!

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

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

相关文章

运放模块的选型参数

增益带宽积-----尤其重要: GWB 增益*带宽 压摆率: 高带宽的运放一般都是电流型运放: 注意压摆率计算公式里面的Vopp参数是放大后的电压最大值: 参数,布局一定参考数据手册!!!&…

Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

快速理解使用mq(二)——用户、虚拟HOST、Queue的创建

一、用户的创建 直接添加即可 二、虚拟Host创建 创建完成选择所属用户 点进去新建的host 管理对应权限 三、queue 创建 选择对应host 直接添加即可

系统分析师14:需求工程

1 内容概要 2 需求工程概述 需求工程:需求开发【含需求分析】和需求管理系统分析:软件需求分析、硬件需求分析、网络需求分析软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望考虑“做什么”,而不考虑“怎么做”&#xff0c…

2025 年 IT 前景:机遇与挑战并存,人工智能和云计算成重点

云计算de小白 投资人工智能:平衡潜力与实用性 到 2025 年,人工智能将成为 IT 支出的重要驱动力,尤其是在生成式人工智能领域。人工智能的前景在于它有可能彻底改变业务流程、增强决策能力并开辟新的收入来源。然而,现实情况更加微…

4款工具搞定PDF去水印,线上+软件一应俱全!

作为一名文员,我每天都得和各种文档打交道,其中PDF文件是最常见的。有时候,我们收到的PDF文件会带有水印,这不仅影响了阅读体验,还可能在分享时造成不便。所以,学会如何去除PDF水印对我来说至关重要。今天&…

力扣 滑动窗口最大值

滑动窗口最大值 题目描述 题目分析 维护一个定长窗口的最大值,每当窗口滑动时都有一个新的元素进入和一个原有的元素离开。 比较简单的方法就是用一个优先队列维护窗口最大值 但是堆的计算成本时最坏时是 O ( n log ⁡ n ) O(n\log n) O(nlogn) 优化:…

uni-app在线预览pdf

这里推荐下载pdf.js 插件 PDF.js - Browse Files at SourceForge.net 特此注意 如果报 Promise.withResolvers is not a function 请去查看版本兼容问题 降低pdf.js版本提高node版本 下载完成后 在 static 文件夹下新建 pdf 文件夹,将解压文件放进 pdf 文件…

面试加分必看,11道接口安全测试面试题!

今天,分享一些在面试中可能会遇到的接口安全测试面试问题,助你在面试中从容不迫。 01.HTTPS 与 HTTP 的区别? 02.OSI七层模型是指? 03.你所知道的 HTTP 状态码? 04.你知道SQL注入吗? 05.SQL 注入与XSS…

Xiaojie雷达之路---doa估计(dbf、capon、music算法)

Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,本篇文章主要是介绍一下雷达信号处理中的dbf、capon、music测角算法,一起来看看吧!!! 前言 本文从信号模型、dbf原理、capon原理、music原理以及代码仿真进行展开描述。 信号模型 阵列接收到…

c++与Python用笛卡尔的心形函数输出爱心

我突然想到输出爱心是否可以用笛卡尔的心形函数 在IDLE里用Python输出下面这个图形 在小熊猫c里用c输出下面这个图形 如果当你要输出这些的时候会怎么办 低级:纯输出 print( ********* ********* ***************** ***************** …

Github + Hexo + Shoka搭建个人博客以及遇到的部分问题

博客预览: 主页: 文章: 博客语言链接: 全部分类 |mmjon 不在能知,乃在能行 Shoka官方博客: Yume Shoka 優萌初華 有夢書架 (lostyu.me) 1、准备 1、github账号 :自行去github官网注册…

人生苦短,我用Python✌

面向代码的解释型语言 数据开发和AI 编程语言:让计算机了解我们干什么,翻译官 1.下载软件 解释器安装 点击第二个 改路径 D:\python 安装 测试 winr打开 输入代码 输出 退出环境 exit() 新建文本文档后缀改成py 编写 运行 安装编写代码…

MySQL 性能剖析全攻略

在使用 MySQL 数据库的过程中,性能问题往往是让开发者和管理员头疼的难题。为了有效地解决这些问题,我们需要对 MySQL 进行性能剖析。那么,如何在 MySQL 中进行性能剖析呢?本文将为你详细介绍。 一、为什么要进行性能剖析&#x…

$attrs 与 $listeners 怎么用

在组件 son、grandson 和 great-grandson 中都显示了 this is a sentence,而子组件 son 和孙组件 grandson 中都没有定义 props,说明 parent 组件中的数据正确的传递到了内部组件中。 打开控制台,分别点击组件 grandson 和 great-grandson 中…

用Python实现运筹学——Day 5: 单纯形法介绍

一、学习内容 1. 单纯形法的基本原理与步骤 单纯形法(Simplex Method)是求解线性规划问题的一种常用方法。它是一种迭代算法,用于在凸多边形的顶点上寻找目标函数的最优解,通常用于多变量的线性规划问题。单纯形法主要应用于线性…

如何查看上网记录及上网时间?5种按步操作的方法分享!【小白也能学会!】

“知己知彼,百战不殆”,在数字时代,了解自己的上网行为和时长,不仅能帮助我们更好地管理时间,还能提升工作效率和生活质量。 今天,我们就来分享五种简单易懂的方法,即便是网络小白也能轻松学会…

大模型分布式训练并行技术(九)-总结

近年来,随着Transformer、MOE架构的提出,使得深度学习模型轻松突破上万亿规模参数,传统的单机单卡模式已经无法满足超大模型进行训练的要求。因此,我们需要基于单机多卡、甚至是多机多卡进行分布式大模型的训练。 而利用AI集群&a…

基于Qt/C++UDP 调试软件功能及用途介绍

概述 UDP 调试软件是一个基于 Qt 框架的图形化应用程序,旨在提供一个简单易用的界面用于测试和调试 UDP(用户数据报协议)通信。该软件支持客户端和服务器模式,能够实现数据的发送和接收,方便开发者和网络工程师进行网…

PG数据库的Jsonb全文检索查询

1.操作键值对 PostgreSQL 对 jsonb 类型的筛选查询可以使用 -> 或者 ->> 操作符。 -> 操作符用于通过 JSON 对象中的键来获取对应的值。->> 操作符可以将获取到的值提取出来转化为字符串类型。 例如,下面是一个包含 jsonb 类型字段的表&#x…