03-JAVA设计模式

devtools/2024/9/25 7:24:09/

设计模式GOF23

GOF23是指由设计模式经典名著《Design Patterns: Elements of Reusable Object-Oriented Software》(中译本名为《设计模式——可复用面向对象软件的基础》)的四位作者Erich Gamma、Richard Helm、Ralph Johnson、以及John Vlissides提出的23种设计模式。这四位作者常被称为“四人组”(Gang of Four,简称GOF)。

这23种设计模式主要分为三大类:创建型模式、结构型模式和行为型模式。

这些设计模式不仅能够帮助开发者提高设计的灵活性和代码的重用性,还能使问题的解决方案更加清晰、易于理解。它们被广泛应用在各种软件开发项目中,成为软件开发领域的重要工具和方法。

分类与汇总

分类模式特点
创建型模式-创建型模式关注于对象的创建过程,它们提供了在创建对象时设计对象间关系的方法。
-单例模式保证一个类只有一个实例,并提供一个全局访问点。适用于只需要一个对象实例的场景,如配置信息、线程池等。
-工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。适用于创建对象时不需要指定具体类名的场景。
-抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。适用于需要创建一组相关对象而不需要指定它们的具体类的场景。
-建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。适用于需要逐步构建复杂对象的场景。
-原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。适用于创建新对象成本较大或需要频繁创建对象的场景。
结构型模式-结构型模式关注于类和对象的组合,它们采用继承、聚合等方式组合类和对象以获得更大的结构。
-适配器模式将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而无法协同工作的类可以一起工作。适用于旧接口与新系统不兼容的场景。
-桥接模式将抽象部分与实现部分分离,使它们可以独立变化。适用于抽象和实现需要独立变化的场景。
-组合模式将对象组合成树形结构以表示“部分-整体”的层次结构。使得用户对单个对象和复合对象的使用具有一致性。适用于需要表示对象的部分与整体关系的场景。
-装饰器模式动态地给一个对象添加一些额外的职责。适用于需要动态地给一个对象增加功能或行为的场景。
-外观模式为子系统中的一组接口提供了一个统一的高层接口,使得子系统更容易使用。适用于简化复杂系统的接口或降低子系统与客户端之间的耦合度的场景。
-享元模式运用共享技术有效地支持大量细粒度的对象。适用于系统中存在大量相似对象的场景,通过共享来减少内存占用。
-代理模式为其他对象提供一种代理以控制对这个对象的访问。适用于需要在访问对象时添加额外功能或控制访问权限的场景。
行为型模式-行为型模式关注于对象之间的通信和协作,它们描述了类或对象怎样交互以及怎样分配职责。
-模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。适用于在父类中定义算法框架,在子类中实现具体步骤的场景。
-策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换。使得算法可以独立于使用它的客户变化。适用于多种算法或行为需要根据不同情况动态选择的场景
-状态模式允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类。适用于需要在对象内部状态改变时改变其行为的场景。
-观察者模式定义对象之间的一对多依赖关系,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。适用于一个对象状态变化需要通知其他对象的场景。
-迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。适用于需要遍历集合元素的场景,隐藏集合的内部结构。
-责任链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。适用于多个对象需要处理同一请求,且处理顺序可能变化的场景。
-中介者模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。适用于系统中对象之间存在大量复杂交互的场景,通过中介者来简化交互过程。
-访问者模式表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。适用于需要对一个对象结构中的对象进行多种不同操作,并且这些操作易于扩展的场景。
-解释器模式给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。适用于需要解释和执行特定语法或表达式的场景,如解析配置文件、编写编译器等。

gitee源码

git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git


http://www.ppmy.cn/devtools/23634.html

相关文章

网盘登录业务记录

一、获取验证码 本项目中利用文件流写回验证码图片。 工具类核心:利用jdk内部的BufferedImage类:这个类生成一个图片存到内存缓冲区,方便我们对图片进行操作。 package com.easypan.utils;import javax.imageio.ImageIO; import java.awt.…

在 Linux 上把 Vim 配置为默认编辑器

目录 ⛳️推荐 在 Linux 命令行中编辑 将 Vim 设置为其他程序的默认值 在 Alpine 中编辑电子邮件 总结 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 我使用 Linux 大概有…

MySQL之多表查询

1. 前言 多表查询,也称为关联查询.指两个或两个以上的表一起完成查询操作.前提条件 : 这些一起查询的表之间是有关系的(一对一/一对多).他们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键. 2. 笛卡尔积现象(交叉连接…

MySQL-数据目录

一、MySQL的主要目录结构(MySQL 8) [rootlocalhost ~]# find / -name mysql find: ‘/proc/30845’: 没有那个文件或目录 find: ‘/proc/30855’: 没有那个文件或目录 /etc/logrotate.d/mysql /etc/selinux/targeted/active/modules/100/mysql /etc/sel…

富唯智能案例|双3D相机引导衔架抓取铝型材

随着制造业的快速发展和自动化水平的不断提升,铝型材的自动化抓取和加工成为行业内的一大技术难题。铝型材因其轻便、耐腐蚀、易加工等特点,广泛应用于建筑、汽车、电子等领域。然而,铝型材的形状多样、尺寸不一,以及生产线上的高…

MyBatis处理SQL中的特殊字符

方式一&#xff1a;转义字符 如下案例&#xff1a; < 表示小于的转义字符 <!-- 在Mapper XML文件中定义SQL语句 --> <select id"selectById" resultMap"BaseResultMap">select *from userwhere id < #{id}; </select>方式二&am…

深度研究DSNeRF代码(慢慢更新)

2.此部分的代码 是从https://github.com/Fyusion/LLFF/tree/master?tabreadme-ov-file#1-recover-camera-poses里提取出来的模块&#xff0c;作用是&#xff1a;用于使用colmap生成npy文件poses_bounds.npy 3.此py文件 也是从https://github.com/Fyusion/LLFF/tree/master?ta…

Python转换文本文件为PDF文档,绘制文本到PDF文档页面

文本文件因其轻便、易编辑的优势&#xff0c;常用于日常文字记录与数据交换&#xff1b;而PDF文档则以高保真、格式稳定和良好的阅读体验&#xff0c;成为正式报告、文献发布等场景的首选。将文本文件转为PDF&#xff0c;在PDF内精准绘制文本&#xff0c;旨在兼顾内容的规范呈现…