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

设计模式分类

模板方法模式

核心就是设计一个部分抽象类。

这个类具有少量具体的方法,和大量抽象的方法,具体的方法是为外界提供服务的点,具体方法中定义了抽象方法的执行序列

装饰器模式

现在有一个对象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模式,观察者模式

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


相关推荐
江湖人称小鱼哥2 小时前
Obsidian-Graphify-让你的笔记库自己长出知识图谱
笔记·知识图谱·obsidian·claude code·graphify·卡帕西
苦 涩3 小时前
考研408笔记之计算机网络(三)——数据链路层
笔记·计算机网络·考研408
三品吉他手会点灯4 小时前
STM32F103 学习笔记-21-串口通信(第4节)—串口发送和接收代码讲解(中)
笔记·stm32·单片机·嵌入式硬件·学习
雾岛听蓝5 小时前
Qt操作指南:窗口组成与菜单栏
开发语言·经验分享·笔记·qt
张涛酱1074566 小时前
Subagent Orchestration 深入解析:多Agent协作的层级架构
spring·设计模式·ai编程
北山有鸟6 小时前
【学习笔记】MIPI CSI-2 协议全解析:从底层封包到像素解析
linux·驱动开发·笔记·学习·相机
就叫飞六吧6 小时前
企微组织架构同步到本地
笔记·企业微信
Engineer邓祥浩8 小时前
JVM学习笔记(13) 第五部分 高效并发 第12章 Java内存模型与线程
jvm·笔记·学习
我命由我123458 小时前
程序员的心理学学习笔记 - 反刍思维
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
小江的记录本9 小时前
【系统设计】《2026高频经典系统设计题》(秒杀系统、短链接系统、订单系统、支付系统、IM系统、RAG系统设计)(完整版)
java·后端·python·安全·设计模式·架构·系统架构