- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
从一个模拟鸭子(SimuDuck)的游戏开始我们的模式入门:
设计一套模拟鸭子的应用程序,可以让模拟的鸭子表现出各种各样的行为。起初根据实际情况设计出来的类图是:
注:实线带一个三角箭头为继承,虚线带一个三角箭头为实现
几天后客户突然提出了新的要求,客户要让鸭子飞起来,以表现自己的竞争力,于是我们在超类Duck中加入了fly()方法,以使子类具有飞行的方法。
问题出来了:
Question1:这样继承导致某些不具有飞行行为的子类也具有了飞行行为,这是很可怕的。
Question2:以后需求还会不断变化,这样超类的修改会很频繁,直接导致的后果是,子类的维护会出现很大的困难,即我们所说的类爆炸。
提示1:在涉及到维护时,为了复用项目而使用继承,并不完美
利用继承来提供鸭子的行为,会导致下列的缺点:
1:代码在多个子类中的重复2:运行时的行为不容易改变3:很难知道所有鸭子的行为4:改变会造成不需要改变的部分也改变了
在继承不能解决问题的情况下,我们进一步提出了通过实现接口来改变这种状态,类图如下:
这样可以使得只有那些会飞的鸭子采取实现飞行接口,但是又产生了另一个问题:代码的复用问题。(接口不具有实现代码,所以继承接口无法达到代码的复用)
设计原则1:找出应用中可能需要变化的部分,把他们独立出来,不要和那些不需要变化的代码混在一起。
结果会是:代码变化引起的不经意后果减少,系统变的会有弹性。
设计原则2:针对接口编程,而不是针对实现编程;(针对接口编程是针对超类型编程,,多态起到了关键作用。好好琢磨,)
无论是继承自超类的行为,还是子类自己实现的行为,都是针对实现编程,这样,我们的行为会被固定成一个模式,很难有变化。现在假如我们定义了两个接口一个是飞行接口(FlyBehavior)和叫的接口(QuackBehavior),然后定义具体的实现类(行为子类)去实现这两个接口,这样,子类在实现行为时会继承这些行为类的方法,既达到了代码的复用,也达到了系统有弹性,以后要增加实际子类时,只要根据子类的行为动态的去更改行为子类就可以了。
针对几口编程举例:现在又两个类Dog和Animal,Dog继承自Animal,
针对实现编程:Dog d = new Dog();
d.bark();
针对接口编程:Animal animal = new Dog();
Animal.makeSound();
程序类图的初步整合:
在最后整合的类图中我们可以看到,超类Duck类并没有做很大的变化,只是将叫的行为和飞的行为分离出来,他们是由一系列实现了飞行接口和叫的接口的行为类组成的,这样既实现了继承带来的代码复用,又避免了继承所带来的沉重包袱。
最终的成粗类图组合为:
每一个Duck有一个飞行接口和叫的接口,将飞行和瓜瓜叫委托给他们代为处理。
这时鸭子的行为不是从超类继承过来的,而是和适当的行为对象组合而来的,系统弹性很大。
至此,我们的模拟鸭子程序就初步完成了,当然模式是一种经验的结合,他不是绝对的,不同的场合可以用到不同的模式甚至是不同模式的组合,这是随着开发人员的经验而设计的。
我们将模拟鸭子所用到的模式定义为:策略模式
定义一些算法族,将他们封装起来,让他们可以互相替换,使得算法的变换独立于使用算法的客户。
模式要点:
1:知道oo基础,并不足以让你设计出良好的oo系统,即可维护、可扩展、弹性大。
2:模式不只是一个名称,它代表的是一整套模式背后所象征的质量、特性和约束。
3:模式不是代码,而是解决一系列问题的通用方案。
4:大多的模式都遵循局部改变独立于系统的其他部分。
5:模式将变化的部分和不变化的部分分离出来。
您可能关注的文档
- 第七章:photoshop--Alpha通道.doc
- 电脑技巧 恢复 代文景 word.doc
- 电脑维修技术.doc
- 电子商务概述案例.doc
- 电子商务实验02.doc
- 电子商务网站建设期末试题10.doc
- 电子设计工程师(EDP)专业技术资格认证项目介绍.doc
- 电子原件辨别.doc
- 店面销售技术实务.doc
- 迭代器设计模式.doc
- 《音乐疗法在儿童特殊教育中的情感表达与社交能力提升研究》教学研究课题报告.docx
- 基于智能设备的中学英语课堂互动行为分析及教学策略探讨教学研究课题报告.docx
- 银弗一级消防工程师课件.pptx
- 高中物理教师教学发展支持体系研究——基于数字化教学管理视角教学研究课题报告.docx
- 基于校园水资源循环利用的自制净水装置实验研究教学研究课题报告.docx
- 小学生体育明星崇拜现象的体育教育创新策略研究教学研究课题报告.docx
- 科技节活动对小学生科学态度和价值观的影响研究教学研究课题报告.docx
- 高中数学教学中数学文化教育的重要性及实施路径探讨教学研究课题报告.docx
- 人工智能技术在高中化学个性化教学中的实践与多模态信息融合分析教学研究课题报告.docx
- 初中物理教师教学风格演变规律与画像构建策略分析教学研究课题报告.docx
文档评论(0)