Ranking ALL Design Patterns for Games:https://www.youtube.com/watch?v=0A0-nkB1fxQ

The Catalog of Design Patterns:https://refactoring.guru/design-patterns/catalog

设计模式分为三种类型:

  • Creational - 创建模式
  • Structural - 结构模式
  • Behavioral - 行为模式

它们包含以下模式:

Creational patterns 创建模式 Structural patterns 结构模式 Behavioral patterns 行为模式
Singleton 单例模式 Adapter 适配器模式 Chain of Responsability 责任链模式
Prototype 原型模式 Bridge 桥接模式 Command 命令模式
Builder 建造者模式 Composite 组合模式 Iterator 迭代器模式
Factory 工厂模式 Decorator 装饰器模式 Interpreters 解释器模式
Abstract Factory 抽象工厂模式 Facade 外观模式 Mediator 中介模式
Flyweight 享元模式 Memento 备忘录模式
Proxy 代理模式 Observer 观察者模式
State 状态模式
Strategy 策略模式
Template Method 模板方法模式
Visitor 访问者模式

Creational patterns - 创建模式

  • Singleton:大多是用来创建Manager对象,这类对象需要确保它的实例在任何时刻都存在
  • Prototype:通过复制现有对象来创建新对象,而无需显式指定其具体类,类似于Unity中的预制件
  • Builder:当需要构建复杂对象时,可能会需要复杂的参数或者大量的构造函数。这样做可读性不好,如果想避免这样可以使用Builder来一步步配置对象。
  • Factory:常用于创建单个或多个对象,它提供了一种将对象的创建过程封装在一个共同的接口或基类中的方法
  • Abstract Factory:适用于需要创建一组相关对象的情况,常用在在图形用户界面设计中创建一组具有相同主题或外观的窗口、按钮和其他控件。可以轻松地交换不同主题或外观的,以创建不同风格的用户界面元素,而不需要更改客户端代码。

Structural patterns - 结构模式

  • Adapter:能够将两种不兼容的接口一起工作。多用于将第三方库接入到先有工程中。
  • Bridge:这种模式通过创建一个抽象接口,定义一组抽象方法,并使用实现接口来实现这些方法,从而将抽象部分与具体实现分离开来。它通常在需要处理多层次继承或多个变化维度的情况下非常有用。
  • Composite:类似于Monobehavior,将对象组合成树形结构然后像使用单一对象一样使用他们。
  • Decorator:能够向对象动态地堆叠一堆功能,一般没有用到
  • Facade:将一个复杂的系统隐藏在一个简化的界面之后,这就是外观模式。例如封装好的存档、读档功能。
  • Flyweight:当你有大量的Enemy对象,每个对象都有公共字段的数据例如Hp、Speed等,如果想要统一管理可以使用Flyweight模式,能够将公共部分移到其他地方,统一管理对象。例如在Unity中将Enemy定义为Scriptable对象,并且每个Enemy都引用一个Scriptable对象。
  • Proxy:当调用某些API时,在使用他们之前调用代理接管所有内容并添加一些额外的功能或控制访问。

Proxy 模式有多种变体,包括:

  • 虚拟代理(Virtual Proxy):延迟加载 RealSubject,直到客户端代码首次需要访问它。
  • 远程代理(Remote Proxy):控制访问位于不同地址空间或服务器上的对象。
  • 保护代理(Protective Proxy):控制对敏感对象的访问。
  • 缓存代理(Cache Proxy):为昂贵的操作结果提供缓存,以提高性能。

Behavioral patterns - 行为模式

  • Chain of Responsability:当需要系列操作的时候可以使用这个模式
  • Command:将方法调用转换为对象,常用于允许玩家绑定UI按键
  • Iterator:当需要迭代对象的时候可能有用,一般没有用到
  • Interpreters:用于开发语言解释器或者编译器
  • Mediator:有点像各种Controller的实现方式,能够控制多个对象之间的协作
  • Memento:能够保存对象的状态并在之后恢复它,可以有效地组织存档和读档系统
  • Observer:能够让系统完全互相解耦的最佳方法,当一个对象状态改变时,所有依赖于它的对象都会得到通知并自动更新
  • State:任何类型的有限状态机都属于这种设计模式
  • Strategy:能够在运行时选择需要使用的策略,有点像Command,但是每个策略都解决相同的问题,而每个命令解决不同的问题,可以使用Scriptable对象实现这个设计模式。
  • Template Method:类似于Unity中Monobehavior的事件函数的执行。这个常用于编写库供其他开发者使用,允许他们修改特定的步骤,但是不能修改调用的逻辑。
  • Visitor:能够将算法与运行的对象分开