面向对象范式-2014策略模式ppt课件.ppt

面向对象范式-2014策略模式ppt课件.ppt

ID:59484768

大小:15.63 MB

页数:82页

时间:2020-09-13

面向对象范式-2014策略模式ppt课件.ppt_第1页
面向对象范式-2014策略模式ppt课件.ppt_第2页
面向对象范式-2014策略模式ppt课件.ppt_第3页
面向对象范式-2014策略模式ppt课件.ppt_第4页
面向对象范式-2014策略模式ppt课件.ppt_第5页
资源描述:

《面向对象范式-2014策略模式ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、策略模式欢迎来到OO设计模式村!如何对同一个算法概念拥有多种的实现算法-而客户端可以一致的调用这些具体算法设计模式—策略模式设计场景1鸭子模拟器游戏设计场景:公司需要开发一款鸭子模拟器游戏,游戏中有多种鸭子,如绿头鸭、红头鸭、橡皮鸭、木偶鸭等等,每种鸭子可以游泳、叫、飞、走、抓鱼吃等行为,每种鸭子可以用不同的方式来完成这些行为展示给玩家看,如叫可以是支支叫、呱呱叫,飞可以是展翅飞、拍翅飞等等,以吸引玩家。请设计该场景,便于将来进行扩展。RRDitc.bnuep.comHOWTO简单步骤:1、做什么(场景),需要解决的问题2、谁来做(概念角色模型),有哪些核心概念、

2、对象?3、谁做什么(类职责/方法/契约),对象职责分配4、谁做什么时和谁协作(类关系),确定对象协作关系5、哪些“谁”可以进行变化点封装(类泛化/特化—抽象类及接口派生和实现)6、可视化方式表达静态结构(类图表达)8、写出代码(类实现)7、可视化方式表达动态结构(对象时序图表达)分析—概念设计—规格表示编码—实现评估9、设计效果评估(维护性,扩展性,复用性)注:设计中使用时序图设计类方法及方法实现逻辑完整的具体的OOAD步骤设计场景2设计场景:动作冒险游戏,游戏中有一系列角色(Character),包括国王(King)、皇后(Queen)、骑士(Knight)、妖

3、怪(Troll),这些角色可以在游戏中每一次使用一个武器(Weapon)来攻击对方,并且可以在运行时切换武器,为了增加游戏的乐趣,可以有的武器包括:匕首、宝剑、斧头、弓箭等等,可能以后又更时髦的武器出现。请设计该场景。模拟鸭子游戏SimDuckJoe上班的公司做了一套相当成功的模拟鸭子游戏:游戏中出现各种鸭子,一边游泳戏水,一边呱呱叫,此系统内部设计使用了标准的OO技术,设计如下:模拟鸭子游戏SimDuck此系统内部设计使用了标准的OO技术,设计如下现在的问题?(1、设计场景:做什么)现在我们得让鸭子能飞!Joe的解决方案子类继承Duck类的Fly方法,这样会有什

4、么问题呢?Joe的解决方案所有鸭子都会一样的飞?Joe的解决方案—可怕的问题发生了橡皮鸭子怎么也会飞?Joe的解决方案—可怕的问题发生了橡皮鸭子怎么也会飞?现在怎么改才行呢?Joe的解决方案—再次想到继承子类方法覆盖,OK?解决方式:如果子类不同方式飞或叫,就覆盖,不然就直接继承父类的方法Joe的解决方案—再次想到继承1、可是还可能有更多的鸭子2、每当有新的鸭子出现,joe就要检查是否需要覆盖哪些方法这不是噩梦吗?Joe的解决方案—利用接口如何?超笨的主意!!重复代码!!!如果你是Joe,你要怎么办?还记得优雅的修改、扩展吗?如何让我们上面的设计能优雅的适应需求的

5、变化呢把问题归零--设计原则把会变化的部分取出并“封装”起来,好让其他部分不会受到影响结果如何?修改代码所引起的不经意后果变少,系统变得更有弹性原则的另一种思考方式,把会变化的部分取出并封装起来,以便以后可以轻易的改动或者扩充此部分,而不影响不需要变化的其他部分。封装的工具:抽象类或者接口重新设计封装的工具:抽象类或者接口分开变化与不会变化的部分Duck类内的fly()和quack()会随着鸭子的不同而改变。为了要把这两个行为从duck类中分开,我们将它们封装拥抱变化:变化点有1、鸭子2、?3、?设计鸭子的行为封装的工具:抽象类或者接口分开变化与不会变化的部分拥抱

6、变化Duck类内的fly()和quack()会随着鸭子的不同而改变。为了要把这两个行为从duck类中分开,我们将它们用“接口”封装,这样duck类就不需要知道行为的实现细节如何修改和扩展呢,效果如何?设计鸭子的行为我只知道你是我的偶像知人知面不知心类型限制针对超类型(SuperType)编程,即抽象类或接口,定义变量时的声明类型应该是超类型,这样才会在运行时体现多态的效果!如何修改和扩展呢,效果如何?如果你还不知道多态,请看!实现鸭子的行为(最高境界)效果如何?修改扩展复用与继承对比轻松多了调用鸭子的行为(变量定义)超类型变量定义调用鸭子的行为问题:1、Malla

7、rdDuck的行为能否动态改变呢?如先呱呱叫,接着吱吱叫2、是否是针对接口编程呢?调用鸭子的行为OOP三件事:1、声明对象变量;2、实例化对象;3、对象方法调用。OOP两种编程方式:1、针对接口编程;2、针对具体实现编程。类关联成员变量的实例化有哪些方式?请尽量多的例举!能否动态改变行为呢?动态设定行为(setter方法)问题:1、MallardDuck的行为能否动态改变呢?如先呱呱叫,接着吱吱叫2、是否是针对接口编程呢?测试类调用你能画出测试方法的时序图吗?设计类图作业思考你能划出鸭子模拟器的设计类图吗?你能列出在设计过程中所有用到的原则吗?你能画出鸭子模拟器的

8、时序图吗?

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。