公司做了一套相当成功的模拟鸭子游戏:SimUDuck。游戏中会出现各种鸭子,一边游泳戏水,一边呱呱叫。此系统的内部设计使用了标准的OO技术,设计了一个鸭子超类(Superclass),并让各种鸭子继承此超类。

去年,公司的竞争压力加剧。主管们确定,此模拟程序需要会飞的鸭子来将竞争者抛在后头。
如何去实现????

分析:此程序需要会飞的鸭子,逐步考虑:

  1. 可以在Duck基类中加一个fly()方法,然后在子类MallardDuck、RedhradDuck中重写该方法。但是每增加一种颜色的鸭子,都需要重写fly()方法。这样子会比较麻烦。
  2. 使用接口,我们可以把fly()方法放到接口里,只有那些会飞的鸭子才需要实现这个接口。但是如果鸭子数量过多时,那么所有的鸭子都需要重复实现这个方法,而且如果我们想对fly()做一点修改,那么我们就需要修改很多很多次。
  3. 软件开发的一个不变真理是改变,不管软件设计的多好,一段时间之后,总是需要成长和改变,否则软件就会“死亡”。所以我们要设计易扩展的程序将经常要改变的代码抽离出来抽象成变量或者类来代替,不能写死。
  4. 分开变化和不会变化的部分,在这个问题中,除了fly()之外,Duck类一切还算正常,我们可以建立一组与fly相关的类,实现“可以飞”和“不可以飞”
  5. 至此,模拟鸭子的UML图如下:
  6. 在鸭子里,并不是所有的鸭子都会叫的,有的鸭子嘎嘎叫,呱呱叫,有的鸭子不会叫。所以也可以把quack()行为从基类Duck中隔离出来,再创建一组与quack相关的类,实现“呱呱叫”、“嘎嘎叫”和“不会叫”。
  7. 模拟鸭子的UML图如下:

软件工程:模拟鸭子游戏相关推荐

  1. 设计模式解读之一: 策略模式——鸭子游戏

    设计模式解读之一: 策略模式--鸭子游戏 当我们掌握了Java的语法,当我们了解了面向对象的封装.继承.多态等特性,当我们可以用Swing.Servlet.JSP技术构建桌面以及Web应用,不意味着我 ...

  2. 离散事件模拟在游戏中的应用

    离散事件模拟(discrete event simulation),这个东西可能在游戏领域用得并不是很多,它是模拟仿真领域的一个仿真模型,用来模拟在时间轴上一系列离散事件后,整个系统的变化情况,这么说 ...

  3. 不使用物理引擎,自己动手做真实物理的模拟投篮游戏

    最近打算做一个2D投篮游戏,由于对于BOX2D等物理引擎并不熟悉,加之一开始低估了游戏所需要的碰撞检测复杂度,认为仅仅涉及4面墙,篮球,篮板,篮筐,篮网的碰撞检测并不复杂.因此决定自己实现所需要的碰撞 ...

  4. 利用Java模拟石头剪刀布游戏

    模拟石头剪刀布游戏 import java.util.Scanner;public class Sjb {public static void main(String[] args) {Scanner ...

  5. 3.9 编写程序,模拟石头剪刀布游戏。程序随机产生一个数,这个数为2、1或0,分别表示石头剪刀和布。

    1. 题目要求编写程序,模拟石头剪刀布游戏.程序随机产生一个数,这个数为2.1或0,分别表示石头剪刀和布.提示用户输入值2.1或0.然后显示一条消息,表明用户和计算机谁赢了游戏.下面是运行示例:你出什 ...

  6. java基础_设计模式_设计基础(小鸭子游戏)

    小鸭子游戏,是好多爱好者接触设计模式.认知设计模式概念的一个入门. 每个初学者的理解不同,我加上自己的理解大体是这样的:前提是处理大规模时,假设池塘中有10000头小鸭子,有红头鸭,野鸭子,木头鸭子等 ...

  7. java石头剪刀布界面_利用Java模拟石头剪刀布游戏

    模拟石头剪刀布游戏 import java.util.Scanner; public class Sjb { public static void main(String[] args) { Scan ...

  8. 一款模拟养成类游戏的策划大纲

    昨天听到公司策划又对现在一个项目提出新的需求,做一个模拟经营的框架,有感而发,想到以前做的一家游戏公司的模拟经营类游戏(航海贸易+生产)以及现在要做的结合起来,自己设计一款游戏吧. 首先,这款游戏我想 ...

  9. 超好玩的mac模拟经营游戏:巨型水族馆中文版

    喜欢玩经营模拟类游戏的朋友可以试试巨型水族馆Megaquarium for mac哦!巨型水族馆中文版以水族馆为背景,玩家作为一个大型水族馆的馆长,你需要亲自设计水族馆,招募水族馆员工,管理水族馆的日 ...

最新文章

  1. shell脚本api接口考虑并发问题的可行性操作
  2. spell_picture3.1版本windows上手动拼图的软件的升级
  3. Linux 查看端口占用情况 并 结束进程
  4. influxdb无法实现关联表_双汇:从棘手的InfluxDB+Redis到TDengine
  5. MYSQL基础笔记(三)-表操作基础
  6. 使用SCVMM2012从hyper-v 2.0平台往hyper-v 3.0平台迁移VM虚拟机的报错(2)
  7. pku2503 Babelfish
  8. python编写自定义函数判断n1-n2范围内的素数_【每日道代码题001】- PYTHON基础复习...
  9. Mr.J--简单页面制作
  10. 修复十一个重要高危漏洞 苹果致谢滴滴美研
  11. xshell 中使用vim 显示Xmanager运行失败:
  12. 13、XSI,信号量简介
  13. 100道Python经典练习题.pdf(附答案)
  14. 后缀树后缀数组LCP
  15. ImportError: Could not import
  16. xcode run跑项目或者Archive打包项目的时候显示Build Succeeded一闪而过但是程序无反应问题解决
  17. 解决mysql报错ERROR 2002 (HY000)
  18. 使用Python解密仿射密码
  19. 执行多个window.onload匿名函数的方法
  20. OpenNI 1.3.2.1发布

热门文章

  1. 第三代智能房,未来已来!与京东,一起京彩未来,与众咖论道科技地产!
  2. 大数据毕业设计 招聘网站数据分析可视化 - python flask 网络爬虫
  3. Xshell如何连接Ubuntu虚拟机?
  4. Android旅游景点美食点评系统app
  5. css 字间距离 段落字符间距设置
  6. 从乡镇副镇长辞职到入职互联网大厂,我走了一条反方向路
  7. 一文读懂Mysql所有知识点
  8. 云计算学习之路——文件服务NFS
  9. 网络流_最小割_洛谷P1345
  10. 小白学算法——借用leetcode(其实就是刷题记录....——1