命令模式,观察者模式,状态模式,享元模式

什么是命令模式?

核心思想是 将原本直接调用的方法封装为对象(如AttackCommand,对象包含​​执行逻辑​ ​和​​上下文信息​​(如目标、参数)。比如,玩家的按键操作被封装成一个命令对象,而不是直接调用角色的方法,可以支持撤销/重做。

这样可以将请求的发起者和执行者解耦

如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合,这是命令模式的使用场景

使用时机 :**当需要先将一个函数登记上,然后再以后调用此函数时,就需要使用命令模式,**其实这就是回调函数。

**有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么。**此时希望用一种松耦合的方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间的耦合关系

例子 :拿订餐来说,客人需要向厨师发送请求,但是完全不知道这些厨师的名字和联系方式,也不知道厨师炒菜的方式和步骤。 命令模式把客人订餐的请求封装成 command 对象,也就是订餐中的订单对象**。**这个对象可以在程序中被四处传递,就像订单可以从服务员手中传到厨师的手中。这样一来,客人不需要知道厨师的名字,从而解开了请求调用者和请求接收者之间的耦合关系

什么是观察者模式?

观察者模式是关于多个对象想知道一个对象中数据变化情况。是一种一对多的依赖关系,当一个对象的状态发生变化时,所有它的"观察者"都得到通知。

**主要解决:**一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。

事件

一个类对象可以通过事件来通知别个类对象,如果这个事件发生了,那么关心、订阅这个事件的对象们会纷纷作出反应

事件必须用委托类型来声明,并且只能由该委托类型来订阅

委托

用于将方法作为参数传递给其他方法,是引用类型

使用delegate关键字来声明一个类型,然后再创建这个委托类型实例

委托的优势:多播和动态绑定

Action委托:指向一个无返回值的方法

Func委托:指向一个有返回值的方法

使用场景

(1)当一个对象的数据更新时需要通知其他对象,但这个对象又不希望和被通知的那些对象形成紧耦合。

(2)当一个对象的数据更新时,这个对象需要让其他对象也各自更新自己的数据,但这个对象不知道具体有多少对象需要更新数据

观察者模式满足"开-闭原则"

对扩展开放​

  • ​新增观察者无需修改主题代码

  • ​主题可以动态增减观察者

对修改关闭​

  • ​主题的逻辑不因观察者变化而修改

什么是状态模式?

主要解决:当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。

意图:允许一个对象在其内部状态改变时改变它的行为

使用状态模式,可以很好地避免过多的if--else --分支,状态模式将每一个状态分支放入一个独立的类中,每一个状态对象都可以独立存在,程序根据不同的状态使用不同的状态对象来实现功能

要使用状态模式,我们必须明确两个东西:状态和每个状态下执行的动作

在状态模式中,因为所有的状态都要执行相应的动作,所以我们可以考虑将状态抽象出来。

状态的抽象一般有两种形式:接口和抽象类 。如果所有的状态都有共同的数据域,可以使用抽象类,但如果只是单纯的执行动作,就可以使用接口。

状态模式和策略模式的不同?

用状态模式的情况​

✅ ​​对象行为由内部状态决定​ ​(如角色状态、AI行为)。

✅ ​​状态之间有逻辑关联​ ​(如"待机→行走→攻击→待机")。

✅ ​​状态转换由对象内部管理​​(如角色自动进入下一个状态)。

​用策略模式的情况​

✅ ​​需要动态切换算法​ ​(如不同武器效果、排序算法)。

✅ ​​策略之间无逻辑关联​ ​(如火焰、冰冻、雷电是独立的)。

✅ ​​客户端决定使用哪种策略​​(如玩家选择武器)。

相关推荐
AIex-YH1 天前
菌种工艺四讲(三):育种工具不是“越新越好“,是“越匹配越好“
制造·策略模式
起司喵喵1 天前
Flutter-MacOS桌面OS系统|flutter.+window_manager客户端OS模板
flutter·macos·策略模式
啊真真真2 天前
macOS下libnfc ..写卡失败问题及解决方案
macos·策略模式
若衹如初見2 天前
一步一步学习使用LiveBindings() LiveBindings图像绑定与自定义绑定方法()
学习·命令模式
Eric Woo X3 天前
macOS 旧版本无法启动 Steam ?一条命令恢复运行(2026年7月实测)
macos·策略模式
紫霄芯语5 天前
观察者模式在FPGA中断系统的实战重构
观察者模式·fpga开发·重构
张小姐的猫11 天前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
笨拙的老猴子17 天前
小明学架构师的第七课:策略模式:告别if-else的选择困难症
系统架构·策略模式
肖爱Kun18 天前
C++设计策略模式
开发语言·c++·策略模式
ttod_qzstudio18 天前
【软考设计模式】观察者模式:一对多依赖的自动通知与订阅解耦精讲
观察者模式·设计模式