一、设计模式基础概念
-
定义 :对特定问题的解决方案,提高代码的可维护性、可重用性、可理解性、可靠性。
-
四个基本要素:模式名称、问题、解决方案、效果。
-
分类方式:
-
按目的:创建型、结构型、行为型
-
按范围:类模式、对象模式
-
二、创建型设计模式(5种)
1. 单例模式
- 定义 :保证一个类只有一个实例,并提供一个访问它的全局访问点。

-
分类:创建型对象模式。
-
游戏实例:游戏管理器GameManager、音频管理器AudioManager、存档管理器SaveManager。整个游戏只能有一个音频管理器,否则会同时播放多个背景音乐;只能有一个存档管理器,否则会出现存档冲突。
2. 工厂方法模式
- 定义 :定义一个用于创建对象的接口,让子类决定实例化哪个类。使一个类的实例化延迟到其子类。

-
分类 :创建型类模式。
-
游戏实例:怪物工厂。普通关卡工厂生成史莱姆、哥布林;BOSS关卡工厂生成巨龙、恶魔。新增关卡时只需新增一个工厂类,不用修改原有怪物生成代码。
3. 抽象工厂模式
- 定义 :提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们具体的类。

-
分类:创建型对象模式。
-
游戏实例:装备套装工厂。战士套装工厂生产铁剑+铁甲;法师套装工厂生产法杖+法袍。保证同一套装的装备风格统一,不会出现战士穿法袍的情况。
4. 生成器模式(Builder)
- 定义 :将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

-
分类:创建型对象模式。
-
游戏实例:角色创建器。先选种族→再选职业→再分配属性→最后捏脸,不同步骤组合出不同角色。角色创建过程复杂,用建造者可以清晰地分步构建,还能创建预设角色(如"新手战士")。
5. 原型模式
- 定义 :用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。

-
分类:创建型对象模式。
-
游戏实例 :克隆敌人。从一个原型史莱姆复制出100个相同的史莱姆;复制子弹。大量创建相同对象时比
new快得多,还能保留原型对象的所有配置。
三、结构型设计模式(7种)
6. 适配器模式
-
定义 :将一个类的接口转换成客户希望的另一种接口。它使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
-
分类 :结构型类模式或结构型对象模式。
-
游戏实例:把旧的PS4手柄适配到PC游戏;把旧的音效引擎适配到新的游戏引擎。不用重写整个手柄驱动或音效引擎,只需写一个适配器就能复用旧代码。
7. 桥接模式
-
定义 :将抽象部分与其实现部分分离,使它们都可以独立的变化。
-
分类:结构型对象模式。
-
游戏实例:角色和武器。角色(战士、法师)是抽象,武器(剑、法杖)是实现,战士可以拿法杖,法师也可以拿剑。新增角色或武器时互不影响,不用为每个角色都写一套武器代码。
8. 组合模式
-
定义 :将对象组合成树型结构以表示"部分-整体"的层次结构,它使得用户对单个对象和组合对象的使用具有一致性。
-
分类:结构型对象模式。
-
游戏实例:技能树。单个技能和技能组合(如"火焰冲击+灼烧")都可以被学习和使用。处理树形结构时非常方便,不用区分是单个技能还是技能组合。
9. 装饰模式
-
定义 :动态地给一个对象添加一些额外的职责。
-
分类:结构型对象模式。
-
游戏实例:装备附魔。给铁剑附魔"火焰伤害"→再附魔"吸血"→再附魔"暴击"。比继承灵活得多,可以任意组合附魔效果,不用为每种组合创建一个新类。
10. 外观模式
-
定义 :为子系统中的一组接口提供一个一致的界面,它定义了一个高层接口,这个接口使得这一子系统更加容易使用。
-
分类:结构型对象模式。
-
游戏实例:游戏启动器。点击"开始游戏"按钮,自动初始化图形、音频、输入、网络等所有子系统。玩家不用关心游戏内部怎么启动,只需一个简单的按钮。
11. 享元模式
-
定义 :运用共享技术有效地支持大量细粒度的对象。
-
分类:结构型对象模式。
-
游戏实例:地图瓦片。整个地图有10000个草地瓦片,但只创建一个草地瓦片实例,所有位置共享它。如果每个瓦片都创建一个实例,会占用大量内存,导致游戏卡顿。
12. 代理模式
- 定义 :为其他对象提供一种代理以控制对这个对象的访问。

-
分类:结构型对象模式。
-
游戏实例:资源加载代理。加载大地图时先显示"加载中"的占位图,等地图加载完成后再显示真实地图。可以延迟加载资源,提高游戏启动速度,还能在加载过程中显示提示信息。
四、行为型设计模式(11种)
13. 责任链模式
-
定义 :使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
-
分类:行为型对象模式。
-
游戏实例:伤害处理链。伤害先被护甲减免→再被护盾吸收→最后才扣血。可以灵活地添加或移除伤害处理步骤,比如新增"魔法抗性"处理环节。
14. 命令模式
-
定义 :将一个请求封装为一个对象,从而使得可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
-
分类:行为型对象模式。
-
游戏实例:玩家输入。W键对应"向前移动"命令,鼠标左键对应"攻击"命令,按Ctrl+Z可以撤销上一步操作。可以记录玩家的所有操作,实现回放和撤销功能,还能把操作序列保存成宏。
15. 解释器模式
-
定义 :给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
-
分类 :行为型类模式。
-
游戏实例:任务脚本。解释"击杀10个哥布林"、"收集5个草药"这类任务条件;控制台命令。可以让策划用简单的脚本语言编写任务,不用程序员修改代码。
16. 迭代器模式
-
定义 :提供一种方法顺序访问一个聚合对象中的各个元素,且不需要暴露该对象的内部表示。
-
分类:行为型对象模式。
-
游戏实例:背包遍历。不管背包内部是用数组、链表还是哈希表存储,都可以用同一个迭代器遍历所有物品。遍历代码和背包内部存储结构解耦,修改存储结构不用修改遍历代码。
17. 中介者模式
-
定义 :用一个中介对象来封装一系列的对象交互。它使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
-
分类:行为型对象模式。
-
游戏实例:游戏消息系统。所有对象(玩家、敌人、UI)都通过消息系统发送和接收消息,不直接交互。降低对象之间的耦合度,一个对象的变化不会影响其他对象。
18. 备忘录模式
-
定义 :在不破坏封装性的前提下捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。
-
分类:行为型对象模式。
-
游戏实例:游戏存档。保存玩家的位置、血量、装备、任务进度等状态,读档时恢复。不用暴露对象的内部状态就能保存和恢复,保证封装性。
19. 观察者模式
-
定义 :定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
-
分类:行为型对象模式。
-
游戏实例:成就系统。玩家击杀100个敌人时,自动通知成就系统解锁"百人斩"成就。玩家和成就系统解耦,玩家不用知道有哪些成就系统在观察他。
20. 状态模式
-
定义 :允许一个对象在其内部状态改变时改变它的行为。
-
分类:行为型对象模式。
-
游戏实例 :角色状态。正常状态下可以移动和攻击;受伤状态下移动速度减慢;死亡状态下不能做任何操作。把每个状态的行为封装在单独的类中,避免出现大量的
if-else判断。
21. 策略模式
-
定义 :定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。它使得算法可以独立于使用它们的客户而变化。
-
分类:行为型对象模式。
-
游戏实例:AI行为策略。普通敌人用"追击玩家"策略,远程敌人用"保持距离射击"策略,BOSS用"阶段切换"策略。可以随时切换敌人的AI行为,不用修改敌人类本身。
22. 模板方法模式
-
定义 :定义一个操作中的算法骨架,而将一些步骤延迟到子类中。它使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。
-
分类 :行为型类模式。
-
游戏实例:游戏关卡。所有关卡都有"加载资源→生成敌人→玩家战斗→关卡结束"的流程,具体每个关卡生成什么敌人由子类实现。所有关卡复用相同的流程代码,避免重复。
23. 访问者模式
-
定义 :表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的新操作。
-
分类:行为型对象模式。
-
游戏实例:碰撞检测。不同物体(玩家、敌人、子弹、墙壁)之间的碰撞处理不同,用访问者可以为每种碰撞组合添加处理逻辑。新增碰撞类型时不用修改原有物体类,只需新增一个访问者类。
五、设计模式分类总表
