目录

一、意图

二、动机

三、子类沙箱

1.适用场景:

2.缺点:

3. 优化:

4.可不写入基类的操作


子类沙箱是一种软模式,它表述了一个基本思路,但没有很多细节机制。

一、意图

用一系列由基类提供的操作定义子类中的行为。

二、动机

当我们创建一个Superpower基类,然后由他派生很多的超能力种类。如果由每个子类自己控制物理,音效,UI。就会造成很多冗余代码,与引擎高度耦合,不易维护,很难管理。

解决方法就是将这些会被高度复用的代码写成Superpower基类的protected函数,可以是虚函数,也可以不是。子类只能调用它。

而沙箱方法,就是子类必须实现的抽象的protected方法。

这样就将耦合约束到了一个地方。当外部改变时,我们可以只改变基类,但众多子类不需要修改。

三、子类沙箱

基类定义抽象的沙箱方法和几个提供的操作。将操作标为protected,表明它们只为子类所使用。每个推导出的沙箱子类用提供的操作实现了沙箱函数。

1.适用场景:

1.基类需要推导很多的子类

2.基类可以提供子类需要的所有操作

3.在子类中有行为重复,需要复用代码

4.想要最小化子类和程序的其他部分耦合

2.缺点:

基类的代码会越来越多,并紧密的与子类绑定,能难在不改变破坏子类的情况下改变基类——脆弱的基类。

3. 优化:

考虑将基类的一些操作放入分离的类中,组件模式可以帮上忙。这样就减少了基类中的方法,减少了基类与其他系统的耦合,在辅助类中的代码更好的管理。

比如实现这个声音的类。

4.可不写入基类的操作

1.少数类收益,建议子类直接调用外部系统。

2.如果子类调用了其他地方的方法,但是没有修改状态,就是安全的耦合。

3.如果操作只是增加了外部系统的转发调用,就可以只截调用。

游戏设计模式阅读笔记11——行为模式(子类沙箱)相关推荐

  1. 游戏设计模式阅读笔记19——优化模式(空间分区)

    目录 一.意图 二.动机 三.空间分区 1.适用场景: 2.实例代码 四.注意 1.划分是层次的还是平面的? 2.划分依赖于对象数量吗? 空间分区 · Optimization Patterns · ...

  2. 游戏设计模式阅读笔记18——优化模式(对象池模式)

    目录 一.意图 二.动机 三.对象池模式 四.实例代码 五.注意 1.对象和池耦合的问题 一.意图 放弃单独地分配和释放对象,从固定的池中重用对象,以提高性能和内存使用率. 二.动机 比如粒子系统的调 ...

  3. 游戏设计模式阅读笔记13——解耦模式(组件模式)

    一.意图 允许单一实体跨越多个领域而不会导致这些领域彼此耦合. 二.动机 当一个系统涉及到渲染,物理,声音,控制器输入等等...如果都写在一个类中,这个类就显得巨大且不易维护添加,高度耦合. 在使用并 ...

  4. 游戏设计模式阅读笔记4——重访设计模式(原型模式)

    目录 1.<圣铠传说>例子 2.原型语言范式 现在有很多原型的术语,这里讨论的是传统的原型设计模式. 1.<圣铠传说>例子 但这种会产生众多的类,众多的引用,众多冗余,众多的副 ...

  5. Head First设计模式(阅读笔记)-04.工厂模式

    披萨订购 假设要完成披萨订购的功能,披萨的种类很多,比如 GreekPizz.CheesePizz 等,披萨店会根据用户需要的披萨种类制作披萨,制作的流程包括prepare->bake-> ...

  6. 游戏设计模式阅读笔记8——序列模式(游戏循环)

    目录 一.意图 二.动机 三.游戏循环 四.实例代码 1.能跑多快跑多快 2.休息一下 3.可以走一小步,也可以走一大步 4.固定时间刷新 五.目前的游戏循环 六.用电量相关 七.总结 1.固定时间步 ...

  7. Cocos2dx游戏开发系列笔记11:解刨《战神传说》完结篇

    懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 ) 两点: 1 感谢 net19880504 同学,在上篇提到:想让骨头继续写<战神传说> ...

  8. 设计模式学习笔记——备忘录(Memento)模式

    设计模式学习笔记--备忘录(Memento)模式 @(设计模式)[设计模式, 备忘录模式, memento] 设计模式学习笔记备忘录Memento模式 基本介绍 备忘录案例 类图 实现代码 Memen ...

  9. 设计模式学习笔记——状态(State)模式框架

    设计模式学习笔记--状态(State)模式框架 @(设计模式)[设计模式, 状态模式, State] 设计模式学习笔记状态State模式框架 基本介绍 状态案例 类图 实现代码 State接口 Day ...

最新文章

  1. 华宇输入法linux,华宇拼音输入法DEB版能切换为五笔输入法,附操作方法
  2. 数据结构算法集---C++语言实现
  3. 新浪微博杨卫华 PHP,构建高性能的微博系统——再谈新浪微博架构_杨卫华.pdf
  4. esp8266手机端app_OKEX手机端APP提币教程(附视频)
  5. 【期望】乘坐电梯(金牌导航 期望-2)
  6. [react] React为什么要搞一个Hooks?
  7. Oracle PL/SQL匿名块(三)
  8. 分布式定时任务框架选型,写得太好了!
  9. 1小时学会jQuery,全程无废话,直接上代码
  10. 【写论文技巧】如何写一篇好论文?
  11. 双硬盘安装ubuntu
  12. 一位acm过来人的心得
  13. 均值场博弈_平均场博弈(mean field game)
  14. HTML5期末大作业:HTML+CSS茶叶官网网页设计实例 企业网站制作
  15. C语言遍历文件目录:readdir,opendir
  16. 虚幻引擎学习笔记——Month1 Week1
  17. Nextcloud 内部服务器错误解决
  18. 全新线控制动系统产品发布,清智科技正式完成业务拓展
  19. js中的var是什么意思
  20. 概率论--随机事件及运算

热门文章

  1. python爬取网页内容post_python爬虫之使用POST抓取网页内容
  2. 初识大数据(一)什么是大数据
  3. 64位Win10 2004正式版镜像下载
  4. 设计自己的地图叠加到 Google Maps或者 MicroSoft Vitual Earth
  5. 【解决方案】基于国标GB28181协议视频智能分析平台EasyCVR/EasyGBS打造的智慧企业AR云景解决方案
  6. 为什么一款优秀的移动工具类应用必须开发PC客户端?
  7. win10内存占用过高
  8. hbase安装启动成功,但是执行命令报错
  9. Git入门介绍-1-简单介绍
  10. oracle空值排到最前面或最后面