GOF23种设计模式

GOF(Gang of Four)设计模式是指《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)这本书中介绍的23种经典设计模式。这些设计模式被分为三大类:创建型(Creational)、结构型(Structural)和行为型(Behavioral)。下面是这些设计模式的列表:

创建型模式(Creational Patterns)

创建型模式主要关注对象的创建过程,用于在创建对象时隐藏创建逻辑,而不是使用新的运算符直接实例化对象。这样可以提高程序的灵活性和可复用性。

  1. 工厂方法模式(Factory Method):定义一个接口用于创建对象,但让子类决定实例化哪个类。
  2. 抽象工厂模式(Abstract Factory):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
  3. 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。
  4. 建造者模式(Builder):将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。
  5. 原型模式(Prototype):通过复制现有的实例来创建新的实例,而不是通过构造函数。

结构型模式(Structural Patterns)

结构型模式主要用于处理类或对象的组合,用于解决如何将对象和类组合在一起形成更大的结构。
6. 适配器模式(Adapter):允许接口不兼容的类一起工作。
7. 桥接模式(Bridge):将抽象部分与实现部分分离,使它们可以独立变化。
8. 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。
9. 装饰器模式(Decorator):动态地给一个对象添加一些额外的职责,而不改变其接口。
10. 门面模式(Facade):为一组复杂的子系统提供一个统一的接口。
11. 享元模式(Flyweight):通过共享尽可能多的相似对象来减少对象的数量。
12. 代理模式(Proxy):为其他对象提供一个代理以控制对这个对象的访问。

行为型模式(Behavioral Patterns)

行为型模式主要用于描述对象之间的通信模式,以及如何分配职责和算法。
13. 责任链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
14. 命令模式(Command):将请求封装为一个对象,从而可以使用不同的请求、队列或日志来参数化其他对象。
15. 解释器模式(Interpreter):为语言创建解释器,用来解释该语言中的句子。
16. 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露其内部的表示。
17. 中介者模式(Mediator):定义一个对象来封装一组对象之间的交互,使对象之间不需要显式地相互引用,从而降低它们之间的耦合。
18. 备忘录模式(Memento):捕获一个对象的内部状态,并在该对象之外保存这个状态,以便稍后恢复它。
19. 观察者模式(Observer):当一个对象的状态发生变化时,自动通知所有依赖于它的对象。
20. 状态模式(State):允许对象在内部状态改变时改变其行为。
21. 策略模式(Strategy):定义一系列算法,将每一个算法封装起来,并使它们可以互相替换。
22. 模板方法模式(Template Method):在一个方法中定义一个算法的骨架,将一些步骤延迟到子类中实现。
23. 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。
这些设计模式是面向对象设计中非常宝贵的经验总结,它们提供了一套解决问题的模板,可以帮助开发者设计出更加灵活、可维护和可扩展的软件系统。

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

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

相关文章

【面试题】HashMap为什么可以插入null而Hashtable就不可以(源码分析)

首先hashmap可以插入null值,但是hashtable和hashcurrentHashmap是不支持的;这是因为在 hashmap对插入key为null进行了特殊处理,当插入的值为null的时候会将哈希值设置为0 但是hashtable会直接抛出异常: 并且hashmap是线程不…

笔记:Mysql 主从搭建

主库 创建用户并授权 create user slave identified with mysql_native_password by 123456 GRANT REPLICATION SLAVE ON *.* to slave%; FLUSH PRIVILEGES;主库配置文件 /etc/my.cnf #日志路径及文件名,目录要是mysql有权限写入 log-bin/var/lib/mysql/binlog …

什么是索引及其优缺点

1.1 什么是索引 索引是数据库中用于提高检索性能的排好序的数据结构。它类似于书籍的目录,通过建立特定的数据结构将某个列或多个列的值与它们在数据库中的行关联起来,以加快查询速度。 1.2 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引…

IT廉连看——职场经验——简历里:兴趣爱好怎么写?

你可能觉得,这有啥可讲的嘛?别小看它。一个经验丰富的面试官,能从这个环节一窥你的真实个性和能力。 遗憾的是,大部分人都是随便填的,比如万年不变的读书、看电影之类,这其实浪费了一次强化能力优势的机会…

流畅的 Python 第二版(GPT 重译)(七)

第十三章:接口、协议和 ABCs 针对接口编程,而不是实现。 Gamma、Helm、Johnson、Vlissides,《面向对象设计的第一原则》 面向对象编程关乎接口。在 Python 中理解类型的最佳方法是了解它提供的方法——即其接口——如 “类型由支持的操作定义…

openssl3.2 - exp - openssl speed test

文章目录 openssl3.2 - exp - openssl speed test概述笔记表面上能列出的算法集合没列出的算法, 有的也支持不支持的算法的例子直接提示算法不支持算法的属性找不到到底哪些算法才是可以测试的算法?那看看哪些算法是支持的?包含支持的算法的名称数组在算法失败的提示处, 将支…

【一起学Rust | 基础篇】rust线程与并发

文章目录 前言一、创建线程二、mpsc多生产者单消费者模型1.创建一个简单的模型2.分批发送数据3. 使用clone来产生多个生产者 三、共享状态:互斥锁1. 创建一个简单的锁2. 使用互斥锁解决引用问题 前言 并发编程(Concurrent programming)&#…

【oss】阿里云oss服务器模拟

文章目录 1 测试服务器搭建2 go sdk demo编写2.1 本地文件上传至oss2.2 oss文件下载至本地 3 Reference 1 测试服务器搭建 ruby环境 sudo apt-get update sudo apt-get install ruby ruby --version依赖 sudo gem install thor builder拉取项目 https://github.com/aliyun/o…

未来已来?国内10家AI大模型盘点(附体验网址)

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 1、阿里云——通义千问2、科大讯飞——星火大模…

Unity类银河恶魔城学习记录11-3 p105 Inventory UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI_itemSlot.cs using System.Collections; using System.Collections.Gen…

C语言打印当前时间

#include <time.h> void print_current_time(char* func_name) { // 获取当前的时间 time_t current_time; time(&current_time); // 将时间转换为本地时间格式 struct tm *local_time localtime(&current_time); // 打印当前的时间 …

从初学者到专家:Java的Lambda表达式完整指南

一.Lambda的概念 概念&#xff1a;Lambda表达式是Java 8引入的一项重要功能&#xff0c;它允许我们以更简洁和灵活的方式编写代码。可以把Lambda表达式看作是一种更方便的匿名函数&#xff0c;可以像数据一样传递和使用。 使用Lambda表达式可以让我们写出更短、更易读的代码。…

Linux:ssh多台设备快速访问

目录 一、背景二、技巧1&#xff09;技巧一&#xff1a;“跳过”中间堡垒机2&#xff09;技巧二&#xff1a;反向访问3&#xff09;技巧三&#xff1a;端口转发4&#xff09;技巧四&#xff1a;命令后台运行 一、背景 由于网络或安全的原因&#xff0c;需要通过跳转机&#xf…

C++ —— 内存管理

目录 1. C内存分布 2. C 内存管理方式 2.1 new 和 delete 操作内置类型 2.2 new 和 delete 操作自定义类型 3. operator new与operator delete函数 4. new和delete的实现原理 5. malloc/free 和 new/delete 的区别 1. C内存分布 首先看一段代码&#xff1a; int globalV…

分布式训练遇到问题:NCCL通信相关问题

常见问题: torchrun前面加NCCL_DEBUG=INFO可以查看相关nccl相关错误日志 NCCL_DEBUG=INFO torchrun --nnodes=2 --nproc_per_node=1 --node_rank=0 --master_addr="10.***0.

用Python的turtle库绘制皮卡丘

turtle库的简介 turtle(海龟)库是turtle绘图体系的python实现&#xff0c;turtle库是一种标准库&#xff0c;是python自带的。 turtle(海龟)是一种真实的存在&#xff0c;有一个海龟在窗口的正中心&#xff0c;在画布上游走&#xff0c;走过的轨迹形成了绘制的图形&#xff0…

进阶二叉树

目录 二叉树 二叉搜索树 二叉搜索树的定义 二叉搜索树的操作 哈夫曼树 哈夫曼树的定义 哈夫曼树的构造 哈夫曼树的性质 平衡二叉树 平衡二叉树的定义&#xff1a; 平衡二叉树的插入调整 1.LL插入/LL旋转 2.RR插入/RR旋转 3.LR插入/LR旋转 4.RL插入/RL旋转 二叉树…

仿牛客项目Day10——统一异常处理、记录日志

统一异常处理 在controller里创建advice包&#xff0c;创建ExceptionAdvice类 这个注解括号里面是指只扫描被Controller标注的bean 请求request、响应response、异常exception 普通请求和异步请求的区别在于传的是json还是html吗&#xff1f; 统一记录日志 面向切面编程&…

IO多路复用、域套接字

思维导图 面试题TCP通信中的三次握手和四次&#xff1a; 客户端像向服务器端发送连接请求 服务器应答连接请求 客户端与服务器简历连接 客户端向服务器发送断开请求 服务器应答断开请求 服务器请求关闭连接 客户端发送确认应答 并行和并发的区别&#xff1a; 并行&#xff1a…

外包干了6天,技术明显进步。。。

我是一名大专生&#xff0c;自19年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年8月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…