- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Strategy模式-张子阳
角色技能 与 Strategy
Design Pattern - Strategy
张子阳
jimmy_dev@163.com
引言
看过一些设计模式方面的书籍和文章,虽然很正式,很权威,(也觉得有那么一点刻板),总
是觉得让人不那么好靠近。于是,我思考着像写故事一样来写下自己对设计模式的理解。我们将
以一款奇幻角色扮演游戏(DD)为蓝本,通过游戏中的模块创建或者功能实现来展示 GOF 的设计
模式。当然,这不是一款真正意义上的游戏,只是为了了解设计模式,所以,我会尽可能的使游
戏简单。废话不多说了,我们 Start off 吧。
继承及其问题
在开始我们的游戏之旅之前,我们需要定义玩家可以选择的角色。我们首先想到了四个角色
职业:野蛮人(Barbarian)、佣兵(Soldier)、圣骑士(Paladin)、法师(Wizard)。
按照 OO 的思想,我们需要先定义一个抽象类作为基类,然后供这四个职业继承,以实现代
码的重用。在此之前,我来分析一下角色拥有的能力(方法):
DisplayInfo():显示角色的基本信息。(比如圣骑士:追求至善的热情、维护法律的意
志、击退邪恶的力量 -- 这就是圣骑士的三件武器 ... )
Walk():让角色行走。
Stay():让角色站立。
一般来说,设计时会遵循这样的原则:
1. 对于所有继承类都有,但是每个继承类的实现各不相同的方法,我们在基类中只给出定
义,不给出实现,而在继承类中予以实现。换言之,就是在基类中定义一个抽象方法。
2. 对于所有继承类都有,并且每个继承类的实现完全相同的方法,我们直接在基类中实现
它,而由子类去继承,以实现代码重用。
很显然,每个角色都拥有 DisplayInfo()、Walk() 和 Stay()的能力。其中,DisplayInfo()
对于每个角色都不同;而 Walk()和Stay()对每个角色都相同。于是,我们构建基类 Charactor,
实现了这样的设计:
在基类中实现的问题
到目前为止,我们的程序仅实现了四个角色样子各不相同,并且都能行走和站立。为了让角
色更丰富一些,现在我们让角色可以装配武器,所以,我们需要新添一个方法,我们给它命名为
UseWeapon(),它的实现效果是角色手中拿起一把剑。我们首先想到的是可以将 UseWeapon()放
到基类中,这样可以实现代码的重用。
于是,我们的设计变成下图:
这样看上去很不错,我们利用了面向对象四大思想(抽象、封装、继承、多态)中的继承。可
是好景不长,没过几天,我们觉得这样的角色设置有些单调,个性不鲜明,我们想要对游戏规则
做如下修改:
1、 野蛮人用斧。
2、 法师不用武器。
这样,便引出了在本例中使用继承的问题:我们发现法师、野蛮人都可以用剑,而这不符合
我们定义的游戏规则。
我们将上面的问题抽象化,得到的结论是:给基类添加实体方法,使得不应该拥有此方法
的子类也拥有了此方法,也使得所有子类方法拥有了完全一样的实现。
覆盖基类方法的问题
这个问题似乎很好解决,既然野蛮人和法师不同,那我们只需要让野蛮人和法师覆盖基类的
UseWeapon() 方法就可以了,与此同时,我们将基类方法声明为 virtual 虚拟方法,并给出实
现。这个实现,可以视为角色的默认实现(默认角色用剑)。
这一次,我们的设计变成了下面这样:
这样看上去似乎很好的解决了这个问题,直到有一天,我们又有了新的需求:
1、 需要新添角色 战士(Warrior),他也使用斧。
您可能关注的文档
- MOOC与中小学教育整合的目标与路径美国的经验-上海教育.PDF
- MP5200单芯片移动电源解决方案.PDF
- MP型系列使用说明书.PDF
- MPT1000电机测试系统用户手册-致远电子.PDF
- mprint软件使用指引.PDF
- MS-2624精密光电二极管传感器电路优化设计-AnalogDevices.PDF
- MSDS-HardtopF10CompAwithLC-氟碳面漆F10组份A含铅铬.PDF
- MSDS-FuturaASCompAwithLC-丙烯酸聚氨酯面漆组份A含铅铬.PDF
- MSC产销监管链标准基准版本-MarineStewardshipCouncil.PDF
- MSD业务伙伴行为准则-Merckcom.PDF
- 2025年湖北省黄石市下陆区高三下学期第八周周测物理试卷.docx
- 2025年湖北省黄石市大冶市高三一模物理试卷及答案.docx
- 2025年湖北省黄石市下陆区高三下学期3月联考物理试卷.docx
- 2025年湖北省黄石市下陆区高三下学期物理基础题、中档题型强化训练.docx
- 2025年湖北省黄石市下陆区高三一模物理试卷及答案.docx
- 2025年江苏农林职业技术学院单招职业倾向性测试题库推荐.docx
- 基于城市轨道交通的公交接驳站设置优化研究.docx
- 2025年湖北省黄冈市黄梅县高三二模物理试卷及答案.docx
- 2025年江苏农林职业技术学院单招职业倾向性测试题库及答案1套.docx
- 设备转让协议书范本与设备转让合同7篇.docx
文档评论(0)