03-JAVA设计模式

news/2024/11/23 3:13:21/

设计模式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/news/1438654.html

相关文章

uniapp制作分页查询功能

效果 代码 标签中 <uni-pagination change"pageChanged" :current"pageIndex" :pageSize"pageSize" :total"pageTotle" class"pagination" /> data中 pageIndex: 1, //分页器页码 pageSize: 10, //分页器每页显示…

学习经验分享【33】YOLOv5 / YOLOv7 / YOLOv8 / YOLOv9 / RTDETR 基于 Pyside6 的图形化界面

大论文可以写两章关于算法创新模型&#xff0c;最后一章可以写对前两章提出方法进行封装&#xff0c;利用PyQT5搭建YOLOv5可视化界面&#xff0c;并打包成exe程序&#xff0c;构建检测平台实现简单的应用。用来凑大论文的字数和工作量&#xff0c;是简单又快速的方法&#xff0…

android学习笔记(五)-MVP模式

1、MVP模式demo的实现&#xff0c;效果下&#xff1a; 2、创建一个Fruit类&#xff1a; package com.example.listview; //Fruit类就是Model&#xff0c;表示应用程序中的数据对象。 public class Fruit {private int imageId;private String name;private String price;publi…

原生微信小程序中案例--仿boss区域树选择列多选功能

1. 需求描述&#xff1a; 区域三级列表&#xff0c; 有添加&#xff0c;编辑&#xff0c;删除功能。 选择父级分类&#xff0c;其下子类全部选中&#xff0c;当前分类后加标志显示全字样取消选中子类&#xff0c;其父类分类后标志显示选中数量若子类全部选中&#xff0c;除当…

2255. 统计是给定字符串前缀的字符串数目——力扣

2255. 统计是给定字符串前缀的字符串数目 已解答 简单 相关标签 相关企业 提示 给你一个字符串数组 words 和一个字符串 s &#xff0c;其中 words[i] 和 s 只包含 小写英文字母 。 请你返回 words 中是字符串 s 前缀 的 字符串数目 。 一个字符串的 前缀 是出现在字符…

Java Web 网页设计(3)

3.servlet JavaWeb——Servlet&#xff08;全网最详细教程包括Servlet源码分析&#xff09;-CSDN博客 servlet java不支持 只有Tomcat支持 使用时添加一下 servlet中最常用的两个&#xff08;固定&#xff09;方法&#xff1a; 下面我们创建一个servlet类 package com.oracle…

FPGA组合逻辑电路设计之译码器

在数字电路中可以根据电路功能的不同分为&#xff0c;组合逻辑电路与时序逻辑电路。组合逻辑 电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入&#xff0c;与电路原来的状态无 关。而时序逻辑从电路特征上看来&#xff0c;其特点为任意时刻的输出不仅取决于该…

修复所有 bug 并不能解决所有问题

原文&#xff1a;jeffpsherman - 2024.04.08 在软件领域&#xff0c;如同在制造业&#xff0c;有些问题是由于 bug 或“特殊原因”引发的&#xff0c;而有些则是“常见原因”&#xff0c;这是由于系统设计和实现的性质所导致的。修复 bug 就是移除特殊原因&#xff0c;消除 bu…