面向对象的设计原则与模式

面向对象的设计原则与模式

ID:38493164

大小:374.86 KB

页数:33页

时间:2019-06-13

面向对象的设计原则与模式_第1页
面向对象的设计原则与模式_第2页
面向对象的设计原则与模式_第3页
面向对象的设计原则与模式_第4页
面向对象的设计原则与模式_第5页
资源描述:

《面向对象的设计原则与模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第5章面向对象的设计模式及应用目标掌握设计模式的基本概念掌握几个基本的设计模式学会运用常见的设计模式理解面向对象的设计原则内容大纲从一个例子开始——影片出租店的程序什么是设计模式几个基本的设计模式单例模式、工厂模式、原型模式、组合模式、适配器模式、桥接模式、装饰模式、责任链模式面向对象的设计原则从一个例子开始——影片出租店的程序这是一个影片出租店的程序,计算每一位顾客的消费金额并打印报表。操作者告诉程序:顾客租了哪些影片、租期多长,程序便根据租赁时间和影片类型算出费用。影片分为三类:普通片、儿童片和新片。除了计算费用还要为常客计算点数;点数会随着“租片种类是否为新片”而有所不同。影片出租店的程

2、序初始代码这个起始程序给你留下什么印象?我会说他设计的不好,而且很明显不符合面向对象的精神。对于这样的一个小程序,这点缺点其实没有什么关系。快速而随性(quickanddirty)地设计一个简单的程序并没有错。但如果这是复杂系统中具有代表性的一段,那么我就真的要对这个程序信息动摇了。Customer里头那个长长的statement()做的事情实在太多了,他做了很多原本应该由其他class完成的事情。影片出租店的程序即便如此,这个程序还能继续工作。所以这只是美学意义上的判断,只是对丑陋代码的厌恶,是吗?在我们修改这个系统之前的确如此。编译器才不会在乎代码好不好看呢。但是当我们打算修改系统的时候,

3、就涉及到了人,而人在乎这些。差劲的系统是很难修改的,因为很难找到修改点。如果很难找到修改点,程序员就很有可能犯错,从而引入「臭虫」(bugs)。影片出租店的程序在这个例子里,我们的用户希望对系统做一点修改。首先他们希望以HTML格式打印报表,这样就可以直接在网页上显示,这非常符合潮流。现在请你想一想,这个变化会带来什么影响。看看代码你就会发现,根本不可能在打印HTML报表的函数中复用(reuse)目前statement()的任何行为。你唯一可以做的就是编写一个全新的htmlstatement(),大量重复statement()行为。当然,现在做这个还不太费力,你可以把statement()复制

4、一份然后按需要修改就是。影片出租店的程序但如果计费标准发生变化,又会发生什么事?你必须同时修改statement()和htmlstatement(),并确保两处修改的一致性。当你后续还有再修改时,剪贴(copy-paste)问题就浮现出来了。如果你编写的是一个永不需要修改的程序,那么剪剪贴贴就还好,但如果程序要保存很长时间,而且可能需要修改,剪贴行为就会造成潜在的威胁。影片出租店的程序现在,第二个变化来了:用户希望改变影片分类规则,但是还没有决定怎么改。他们设想了几种方案,这些方案都会影响顾客消费和常客积点的计算方式。作为一个经验丰富的开发者,你可以肯定:不论用户提出什么方案,你唯一能够获得的

5、保证就是他们一定会在若干个月之内再次修改它。影片出租店的程序为了应付分类规则和计费规则的变化,程序必须对statement()作出修改。但如果我们把statement()内的代码拷贝到用以打印HTML报表的函数中,我们就必须确保将来的任何修改在两个地方保持一致。随着各种规则变得愈来愈复杂,适当的修改点愈来愈难找,不犯错的机会也愈来愈少。影片出租店的程序你的态度也许倾向「尽量少修改程序」:不管怎么说,它还运行得很好。你心里头牢牢记着那句古老的工程学格言「如果它没坏,就别动它」。这个程序也许还没坏掉,但它带来了伤害。它让你的生活比较难过,因为你发现很难完成客户所需的修改。这时候就该重构技术粉墨登场

6、了。影片出租店的程序从Customer类中statement方法中分离出amountFor功能amountFor方法中变量名称的修改任何一个傻瓜都能写出计算机可以理解的代码。唯有写出人类容易理解的代码,才是优秀的程序员搬移amountFor方法,变更函数名称去掉临时变量thisAmount对frequentRenterPoints进行类似于amountFor方法的处理去掉临时变量totalAmount和frequentRenterPointsMovie的继承与多态影片出租店的程序我们从中体会到了什么?我们为什么不能一开始就能设计出最后的程序?因为我们没有抓住面向对象设计中的一种规律设计模式就是

7、前人为我们总结出的面向对象设计的一种规律,我们所要做的就是吸收消化,并加以运用设计模式出场啦设计模式基础——什么是设计模式模式(pattetn)就是做事的一种方法,也即实现某个目标的途径,或者技术。这种捕获有效技术的思想可以应用到许多领域当中,比如烹饪、焰火制品生产、软件开发以及其他一些行业。对于任何一个正迈向成熟的行业,人们总会开始寻找一些通用和有效的方法,来达到目标并解决不同场合中的问题。由某

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

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

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