【游戏编程模式】读书笔记三:享元模式、观察者模式
《游戏编程模式》-Bob Nystrom
书籍汉化版网址:https://gpp.tkchu.me/
享元模式
基本定义与概念
享元模式(FlyweightPattern)是以效率为核心的设计模式,当我们有大量类似对象需要进行实例化时,如果直接一个一个类的进行创建,那其将占用大量的内存空间。而享元模式将其对象的数据分为两部分—共享部分(如材质、模型)与其他部分(如大小、坐标)分别储存,共享部分只声明一片固定空间,所有对象持有对该空间的引用,这样生成对象时便只需要关心其他部分的数据即可。
应用场景
- 有大量相同相似对象需要实例化
- 这些对象存在数据可以共享
优点
- 节省内存开销,提高效率
- 在大量创建实例时更方便管理
缺点
- 如果需要实例化的对象不够多,享元模式的引入反而会增加代码管理成本
- 创建对象的过程可能更加繁琐
Unity简单实现
Unity中的预制体、材质球等本身便是应用享元模式进行开发的,如多个物体共用一个材质球等
享元的核心其实便是共享一部分不变的数据来节省空间,在Unity中通过ScriptableObject,静态类等都可以实现共享数据这一功能,同时其与建造者模式、工厂模式都有着不错的相性
以下为一些简单的实现:
1 | namespace FlyweightPattern |
观察者模式
基本定义与概念
观察者模式(ObserverPattern)是一种可以将代码的调用与对于调用的响应分离的设计模式,这是一种极重要的设计模式,C#中的event系统便是基于观察者模式实现的。在观察者模式中,观察者拥有具体的需要执行的代码,被观察者则仅需要负责发出通知,观察者监听到了对应的通知就会执行对应的代码。当我们编写被观察者的其他代码时,便无需关心奇怪的耦合问题,只需要专注于被观察者本身,在需要触发对应事件的时候发出通知即可。
应用场景
- 当一个事件会触发一个或多个分属于不同系统的行为时
- 当程序耦合严重时,观察者模式可以解除观察者与被观察者之间的依赖
Unity简单实现
*此处我直接实现了事件中心,这也是观察者模式的一种体现,引入了事件中心类作为第三方管理者统一订阅与触发事件
1 | namespace ObserverPattern |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hmxs's Blog!
评论