- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第17讲面向对象的设计模式
* 职责和方法 方法实现职责 * GRASP GRASP(General Responsibility Assignment Software Pattern,通用职责分配软件模式) GRASP模式描述了将职责分配给对象的基本原则,这些原则被表示成模式 专家(Expert)、创建者(Creator)、高内聚(High Cohesion)、低耦合(Low Coupling)、控制者(Controller) 多态( Polymorphism)、纯虚构( Pure Fabrication)、中介者(Indirection)、不要和陌生人讲话(Protected Variations) * GRASP:Expert模式 目的:将一个职责分配给信息专家—掌握了为履行职责所必需的信息的类 专家模式在职责分配中的应用比任何其他模式的应用都要广泛,它是面向对象的设计中的一个基本指导原则 专家不是一个含糊的或者新奇的概念,它表达出最普遍的一种“直觉”,即对象所能完成的工作要依赖于它所掌握的信息 优点: 封装能够得以维持,因为对象只使用他们自己包含的信息来完成任务(封装支持低耦合) 系统行为只分布在具有所需信息的类中(类具有高聚合度) 别名: 把责任交给数据;谁知道谁来干;拟人化;自己做… * 示例: Sale的总额 在销售点终端应用中,一些类需要知道一个Sale的总额。 根据专家模式,我们应该找出哪个类对象具有确定销售项总额所需要的信息。 确定销售项总额需要知道什么信息呢? 必须要知道一个销售项对应的SalesLineItem实例。 只有一个Sale实例知道这些信息,因此,按照专家模式,Sale对象所在类应该履行这个职责, Sale就是信息专家 * 示例: Sale的总额 确定销售项记录的金额需要知道什么信息呢? SalesLineItem.quantity和SalesLineItem.price是所需要的信息 SalesLineItem知道它的商品数量和相关的ProductSpecification 根据专家SalesLineItem应该确定记录的子金额(subtotal), SalesLineItem是信息专家。 * 示例: Sale的总额 为了知道和回答一个SalesLineItem的子金额,一个SalesLineItem需要知道商品价格。 因此ProductSpecification是一个信息专家,它可以回答商品价格。 * 示例: Sale的总额 新方法 新方法 * GRASP:Creator模式 目的:要找到一个与被创建对象之间有关联关系的创建者。 问题:谁负责创建一个类的新实例? 优点:支持低耦合度。因为被创建的类很可能早已经对创建者类可见,耦合程序可能不会增加。 * GRASP:Creator模式 解决方案:将创建一个类A的实例的职责指派给类B的实例,如果下例条件满足的话: B聚集了A对象 B包含了A对象 B记录了A对象的实例 B要经常使用A对象 当A对象的实例被创建时,B具有要传递给A的初始化数据(也就是说B是创建A的实例这项任务的信息专家) B是A对象的创建者。 如果以上的条件中不止一条成立的话,最好让B聚集或者包含A。 * 示例:创建一个SalesLineItem 在销售点应用系统中,哪个类负责创建一个SalesLineItem的实例呢? 根据创建者模式,找出一个类,该类聚集、包含SalesLineItem的实例。 由于Sale包含了多个SalesLineItem的实例对象,因此Sale是承担创建SalesLineItem实例这个任务的一个好的候选者。 在Sale中添加新方法makeLineItem()。 * GRASP: Controller模式 解决方案:将处理系统事件消息的职责分派给代表下列事物的类: 代表整个“系统的类”(虚包控制者) 代表整个企业或组织的类(虚包控制者) 代表真实世界中参与职责(角色控制者)的主动对象类 代表一个用例中所有事件的人工处理者类,通常用“用例名处理者”的方式命名(用例控制者)。 使用同一个控制者类处理一个用例中的所有的事件。 问题:谁负责处理一个系统事件? * GRASP: Controller模式 优点: 增加软件构件的可重用性。 理解用例的状态。 问题: 如果设计不好,一个控制者类可能会有低聚合度——功能不集中并且职责所涉及的领域太多,这个的控制者类被称为肥控制者。 警告:使用角色控制者可能会导致低劣的设计 * 示例: 哪个类对象应该是系统事件的控制者呢? 代表整个“系统的类”(POST) 代表整个企业或组织的类(Store) 代表真实世界中参与职责的主动对象类(Cashier) 代表一个用例中所有事件的人工处理者类(BuyItemsHandler)。 * 示例:GRASP模式应
您可能关注的文档
- 第10章 网络程序设计实例.ppt
- 第10章-计算机辅助生产管理与运行控制2(计算机辅助设计与制造).ppt
- 第10章PLC控制系统设计.ppt
- 第10章_典型过程控制系统设计.ppt
- 第10章图形用户界面设计.ppt
- 第10讲 PCB设计基础及实训.ppt
- 第10讲 纵断面设计3-3.ppt
- 第11章 齿轮系及其设计.ppt
- 第11章 U盘PCB板设计.ppt
- 第11章 齿轮系及其设计.ppt
- 2025至2030中国资金信托行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030全球及中国医疗物联网(IoHT)行业产业运行态势及投资规划深度研究报告.docx
- 2025至2030区域冷却能源系统行业产业运行态势及投资规划深度研究报告.docx
- 2025至2030兽医疫苗包装行业项目调研及市场前景预测评估报告.docx
- 2025至2030全球及中国汽车夹行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030流感药物行业项目调研及市场前景预测评估报告.docx
- 2025至2030牛仔短裤行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030局部麻醉药物行业发展研究与产业战略规划分析评估报告.docx
- 2025至2030中国辅助电源(APS)系统行业发展研究与产业战略规划分析评估报告.docx
- 2025至2030全球及中国直播软件行业发展趋势分析与未来投资战略咨询研究报告.docx
文档评论(0)