游戏设计模式阅读笔记12——行为模式(类型对象)

目录

一、意图

二、动机

三、类型对象

        1. 适用场景:

        2.难以定义每种类型的行为

四、实例代码


一、意图

        创造类A来允许灵活地创新“类型”,类A的每个实例都代表了不同的对象类型。

二、动机

        以怪物为例,在一个游戏中可能有很多中怪物。他们有相同的行为,走,攻击,跳跃等。但是他们的血量,攻击力,速度有不同。

        传统的面向对象方案是,写一个Monster基类,然后每种怪物都继承基类。

        但这样的缺点是:数值硬编码,想要修改数据都需要改代码。每种怪物都要重复这些代码。

        优化:让每个品种不再继承Monster,每个怪物是Monster的实例。然后将公共的信息写在Breed类中,Monster去引用Breed类。

三、类型对象

        定义类型对象类(Monster)和有类型的对象类(Breed类)。每个类型对象实例代表一种不同的逻辑类型。每种有类型的对象保存对描述它类型的类型对象的引用。

        1. 适用场景:

        1.类型不定,容易被拓展

        2.想不改变代码或者重新编译就能修改或添加新的类型

注意:这里我们就需要自己将每个品种对象的实例化到内存中,保证正确的引用。

        2.难以定义每种类型的行为

        在类型对象模式中,想实现一个夜晚攻击力增加的效果是在改变了攻击力的数值。使用替换成员变量的方法替换了传统的重载方法。        

        解决:

        第一种方法:使用预先定义的固定行为,每个类型对象中的数据简单地选择他们中的一个。也就是定义函数来实现每种行为,在方法中存储合适函数的引用。

        第二种方法:真正的在数据中定义行为,使用字节码模式。

四、实例代码

        

 

单继承实现部分数据的共享:

 暴露类型对象:

显示暴露娄星对象的好处:

        1.外部代码可以与类型对象直接交互,无需拥有类型对象的实例

        2.类型对象现在是对象公共API的一部分了

继承关系

        可以没有继承,简单,但是会有大量重复工作。

        单继承,也简单,查询属性更慢。

        多重继承,避免代码重复,复杂。

 

 

 

 

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值