软件设计-理论课05.ppt

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
软件设计-理论课05.ppt

Template Method(模板方法) 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 Template Method使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 * Template Method(模板方法) 抽象基类: AbstractClass:抽象基类,定义算法的轮廓。 解析: TemplateMethod的关键在于在基类中定义了一个算法的轮廓,但是算法每一步具体的实现留给了派生类。 但是这样也会造成设计的灵活性不高的缺点,因为轮廓已经定下来了要想改变就比较难了。 * Template Method(模板方法) 举例1: OpenDocument定义了打开一个文档的每一个主要步骤。它检查该文档是否能被打开,创建与应用相关的Document对象,将它加到它入的文档集合中,并且从一个文件中读取该Document。 * void Application::OpenDocument (const char* name) { if (!CanOpenDocument(name)) { // cannot handle this document return; } Document* doc = DoCreateDocument(); if (doc) { _docs-AddDocument(doc); AboutToOpenDocument(doc); doc-Open(); doc-DoRead(); } } Template Method(模板方法) 举例2: 查询数据库的功能,要求支持Oracle、SQL Server 数据库查询的一般步骤: 格式化CONNECT命令; 将CONNECT命令发送给数据库; 格式化SELECT命令; 将SELECT命令发送给数据库; 返回选中的数据集。 * Observer(观察者) 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。 * Observer(观察者) 解析: Observer模式定义的是一种一对多的关系,这里的“一”就是图中的Subject类,而“多”则是Observer类。 当Subject类的状态发生变化的时候通知与之对应的所有Observer类,让它们也相应地更新各自的状态。 支持动态地添加和删除Observer对象的功能。 Observer模式的实现要点: 一般subject类都是采用链表等容器来存放Observer对象 抽取出Observer对象的一些公共的属性形成Observer基类,而Subject中保存的则是Observer类对象的指针,这样就使Subject和具体的Observer实现了解耦,也就是Subject不需要去关心到底是哪个Observer对象放进了自己的容器中。 * Observer(观察者) 举例: 老师有电话号码,学生需要知道老师的电话号码以便于在合适的时候拨打。 在这样的组合中,老师就是一个被观察者(Subject),学生就是需要知道信息的观察者(Observer)。 当老师的电话号码发生改变时,学生得到通知,并更新相应的电话号码 。 * Strategy(策略) 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。 本模式使得算法可独立于使用它的客户而变化 * Strategy(策略) 解析: 简而言之一句话,Strategy模式是对算法的封装。 处理一个问题的时候可能有多种算法,这些算法的接口(输入参数,输出参数等)都是一致的,那么可以考虑采用Strategy模式对这些算法进行封装,在基类中定义一个函数接口就可以了。 * Strategy(策略) 举例1: 不同国家的税率不同,订单的计税 举例2: 在某种比赛中有若干个裁判,每位裁判给选手一个得分。 选手的最后得分是根据全体裁判的得分计算出来的。有几种计算选手得分的评分方案,对于某次比赛,可以从中选择一种方案作为本次比赛的评分方案。 * Observer模式的实现代码分析 作用: 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 * Observer模式的实现代码分析 解析: Observer模式定义的是一种一对多的关系,这里的“一”就是图中的Subject类,而“多”则是Observer类。 当Subject类的状态发生变化的时候通知与之对应的所有Observer类,让它们也相应地更新各自的状态。 支持动态地添加和删除Observer对象的功能。 Observer模式的实现要点: 一般subject类都是采用链表等容器来存放Observer对象 抽取出Observer对象的

文档评论(0)

cai + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档