【设计模式】23种设计模式笔记

news/2025/2/16 6:28:20/

设计模式分类

在这里插入图片描述

模板方法模式

核心就是设计一个部分抽象类。
这个类具有少量具体的方法,和大量抽象的方法,具体的方法是为外界提供服务的点,具体方法中定义了抽象方法的执行序列

装饰器模式

现在有一个对象A,希望A的a方法被修饰
实现思路:

  1. 将A抽象成抽象类O
  2. 装饰器类D来继承O,并聚合O
  3. 装饰器类D的构造函数传参O,并赋值给所聚合的O
  4. 装饰器类D可以不用实现a方法,保持抽象
  5. 具体装饰类D1继承装饰器类D,新增修饰方法d1,然后再重写a方法,重写内部使用修饰方法d1并调用super.a
  6. 具体装饰类D2继承装饰器类D,新增修饰方法d2,然后再重写a方法,重写内部使用修饰方法d2并调用super.a
  7. ……
  8. 使用时,新建原始对象A,把A传入D1构造器并再次用A接收,再把A传入D2构造器并再次用A接收,……于是实现了多重装饰(每一层装饰都对上层屏蔽了下层细节)

适配器模式

实现适配器之前:
在这里插入图片描述
实现适配器之后:
继承方式实现:
在这里插入图片描述
委托方式实现:
在这里插入图片描述

代理模式

代理模式和装饰器模式在作用上类似,不过代理模式侧重于缓解原对象的某些繁重的工作,而装饰器模式侧重于对原对象的某些行为进行修饰和控制

简单工厂、工厂方法、抽象工厂、建造者模式的对比

始终保持面向“产品”思考
当仅需要创造一类产品,且产品内部类别不多时,使用简单工厂模式:
在这里插入图片描述
当仅需要创造一类产品,但产品内部类别纷繁且多变时,使用工厂方法模式:
在这里插入图片描述
当需要创造多类产品,且产品内部类别纷繁且多变时,使用抽象工厂模式:(抽象工厂模式可以用来制造复杂的产品,“将关联零件组装成产品”)
在这里插入图片描述
在抽象工厂模式下,一个最终产品往往是由多个部分组成的,如上图中最终产品就是由产品A和产品B共同组成的,这就导致一个问题:可能由于客户端代码的编写疏忽而导致漏掉某一个部分。于是有了建造者模式:
在这里插入图片描述
建造者模式中新增了Director类,它就相当于一个“保险类”,在Director内部提前编写好没有遗漏任何一个部分的组装流程,然后暴露一个简单的SAP——construct方法直接由客户端调用,这样客户端就从如履薄冰的复杂构造过程中解放了出来,降低了出错的概率

组合模式

一句话精髓——容器与内容的一致性
最好的例子——文件和文件夹的例子
在这里插入图片描述
组合模式最特别的地方就是Composite类含有一个对抽象的Component的聚合

Flyweight模式,享元模式

在这里插入图片描述

Facade模式,外观模式

一句话总结——接口(API)变少了
在这里插入图片描述

Visitor模式,观察者模式

《图解设计模式》这本书太好了,一段话就能把一个设计模式的关键讲清楚:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/1357052.html

相关文章

WordPress主题YIA移动端文章页的面包屑不显示怎么办?

平时我们一般都会在文章页导航菜单下方显示面包屑,类似于“当前位置:boke112百科 WordPress 正文”。平时用浏览器调试站点的时候,在Edge浏览器的“切换设备仿真”中,不管是选择什么设备都会显示面包屑。具体如下图所示&#xf…

银行接口测试学习笔记:接口测试从分析到设计!

一、接口测试流程 01\接口测试计划 制定:人员,工具/平台,脚本,时间,标准,输出接口测试计划文档 02\银行接口文档解析 ①.接口名称:说明接口的作用,不用测试 ②.接口地址:http开头,和URL一样,不用测试 ③.请求方式:post/get/delete/put, 当一个接口有多个方式的时候是需要进…

代码随想录算法训练营第50天(动态规划07 ● 70. 爬楼梯 (进阶) ● 322. 零钱兑换 ● 279.完全平方数

动态规划part07 70. 爬楼梯 (进阶)解题思路总结 322. 零钱兑换解题思路总结 279.完全平方数解题思路 70. 爬楼梯 (进阶) 这道题目 爬楼梯之前我们做过,这次再用完全背包的思路来分析一遍 文章讲解: 70. 爬…

从零开始手写mmo游戏从框架到爆炸(十四)— 英雄和野怪

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 之前都是模板的创建,现在我们来创建英雄和野怪。 枚举类 首先创建几个枚举类,定义野怪的品质和血统等。 LevelExpEnum - 每升一级需要的经验 …

SpringBoot+Vue+MySQL:图书管理系统的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

docker安装milvus后,无法打开attu,日志报错

背景,在虚拟机用docker安装milvus后,正常访问attu,过段时间挂机后无法访问 日志报错: [2024/02/19 06:59:46.761 00:00] [ERROR] [grpcclient/client.go:330] ["ClientBase ReCall grpc second call get error"] [rol…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Menu组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Menu组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Menu组件 以垂直列表形式显示的菜单。 子组件 包含MenuItem、MenuItemGroup子组…

ChatGLM的Trainer模块解析

Trainer类 为什么这样比较好 Trainer是一个简单但功能完备的PyTorch训练和评估循环,针对🤗 Transformers进行了优化。 参数: model: [PreTrainedModel]或torch.nn.Module类型,可选。用于训练、评估或预测的模型。如果未提供,则…