- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Head First 学习笔记
HeadFirst 学习笔记1. 书中列举的设计原则1、封装变化。找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。2、针对接口编程,而不是针对实现编程。举例说明:假设有一个抽象类Animal,有两个具体的实现(Dog与Cat)继承Animal。“针对实现编程”的做法:Dog d = new Dog();d.bark();“针对接口编程”的做法:Animal animal = new Dog();animal.makeSound();或者:Animal animal = getAnimal();animal.makeSound();3、多用组合,少用继承。原因:?a、继承会使类无限膨大,可能会使类变得臃肿。?b、子类可能会继承父类中那些无用甚至有害的方法。?c、组合比继承更灵活,可以实现在执行中动态改变对象的功能。4、为了交互对象之间的松耦合设计而努力。5、类应该对修改关闭,对扩展开放。6、要依赖抽象,不要依赖具体类。解释:不要让“高层组件”依赖“低层组件”,而且,不管“高层组件”还是“低层组件”,两者都应该依赖于抽象。避免违反该原则的几个方针:变量不可以持有具体类的引用。如果使用new,就会持有具体类的引用,可以使用工厂来避开这种引用。不要让类派生自具体类。如果派生自具体类,就会依赖具体类,可以派生自抽象或接口。不要覆盖基类中已实现的方法。如果覆盖基类中已实现的方法,那么基类就不是一个真正适合被继承的类。基类中已实现的方法应该被所有子类所共享。7、最少知识原则。解释:当你设计一个系统时,不管是任何对象,你都要注意与它交互的类有哪些,并注意它和这些类是如何交互的,尽量避免过多的类耦合在一起,带来维护成本的上升。这个原则推荐的一些方针:就任何对象而言,在该对象的方法内,我们只应该调用一下范围的方法1)、该对象本身2)、被当作方法的参数而传递进来的对象3)、此方法所创建或实例化的任何对象4)、对象的任何组件。2. /wxj1020/archive/2008/03/21/1115540.html策略模式先对策略模式有一个总体认识。意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。结构:下面通过鸭子模拟器的设计来具体介绍。公司需要设计一套鸭子模拟器系统,该系统的第一次需求为:鸭子能够戏水;鸭子能够呱呱叫。根据该需求系统设计如下:这个设计主要用了父类鸭子和子类绿头鸭、红头鸭,这样设计的目的是为了达到代码的复用。过了一段时间,公司希望该系统能够满足新的需求:有些鸭子会飞。因此该系统需要进行修改,修改后的系统可能如下:该系统在父类中加了“fly()”方法(在父类中加该方法是为了实现代码的复用)。这里就出现了两个问题:(1)、所有的鸭子都会飞了。(2)、所有鸭子的叫声都一样,都是“呱呱”叫。注:这两个问题可以通过子类中方法覆盖来解除,但这样处理不是很好。鸭子的类别越多,这种处理的缺点就越明显。其实这个系统的变化点是鸭子的叫声和鸭子的飞行能力,因此我们很容易想到把鸭子的叫声和鸭子的飞行能力做成接口,把这些变化的地方封装起来,这样上面的两个问题都可以解决,所以系统可能被修改为下面的样子:MallardDuck和RedheadDuck既会飞又会叫,RubberDuck只会叫不会飞,DecoyDuck不会飞也不会叫。应该说这个系统没有问题了,从表面看这种设计完全符合需求,而且完全符合面向对象的理念,但是当鸭子的类别很多时,你会发现这种设计缺乏代码的复用,这两个独立出来的接口似乎没有任何意义,根本无法减轻工作量,还不如原来的设计呢。所以你可能会想到问题的关键是接口中的方法没有实现,那我们该怎么办呢?我们的做法是把接口做成类,运用组合的方法来实现需求。考虑到“针对接口编程,而不是针对实现编程”的设计原则,我们的系统可能就会设计成如下的结构,这个结构就是应用了“策略”模式。/wxj1020/archive/2008/03/24/1119703.html3. 观察者模式意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。结构:例子:下面以模拟气象站系统来加以说明。需求分析:该系统的需求如下:1、气象站能够追踪目前的天气状况,包括温度、湿度、气压、2、气象站能够提供三种布告板,分别显示目前天气状况、气象统计和简单的预报。3、布告板上的数据必须实时更新。4、气象站必须提供一组API,供其他开发人员开发其他的布告板。设计部分:基于以上需求,该系统可以设计成3部分:气象站(获取实际气象数据的物理装置)、WeatherData对象(追踪来自气象站的数据,并更新布告板)和布告板(显示目前的天气状况给用户看)。效果图如下:
您可能关注的文档
最近下载
- 卫生间改造合同协议书范本模板 .pdf VIP
- 公司档案管理制度流程及公司档案管理办法及实施细则.doc VIP
- 心脏早搏病人护理措施.pptx
- 新解读《GB_T 34585 - 2017纯电动货车 技术条件》最新解读.docx VIP
- 《用户体验设计》课件.ppt VIP
- 2021气瓶安全技术规程.pdf VIP
- 生物材料检验非金属.PPT VIP
- 当代隐喻学认知理论发展及其对翻译研究的启示.docx VIP
- 2024新版2025秋人教版三年级艺术造型美术上册全册教案教学设计(含大单元教学设计).docx
- 第三单元第1课+把握色彩规律+课件+2024—2025学年冀美版(2024)初中美术七年级上册.pptx VIP
文档评论(0)