第七章行为型设计模式分析报告.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ABC三个方法具有离散的特点;分别调用 有没有想过ABC的执行具有一定的顺序,前后的关联? ABC三个方法具有离散的特点;分别调用 有没有想过ABC的执行具有一定的顺序,前后的关联? ABC三个方法具有离散的特点;分别调用 有没有想过ABC的执行具有一定的顺序,前后的关联? * 基本方法:军训,上课,毕业设计,授予学位 模板方法:本科生培养 * 注意观察:反向的控制结构 由教育本本科培养处实例化对象,调用清华大学本科培养处的本科生培养方法 试试:建立一个西南大学本科培养处的类,然后同样由教育部本科培养处实例化对象,然后调用西南大学本科培养处的本科培养方法 比较 * 比较迭代子模式与组合模式的区别? 重点观察集合的特点! 聚合类与迭代类 并列定义 * 红字部分就是内禀的要点,即ConcreteIterator是在ConcreteAggregate内部定义的, ConcreteIterator实例可以访问ConcreteAggregate中的objs * * Changestate操作附属于context类 难点在于 状态类完成操作后应自动切换状态,也就是应该由状态类来完成状态切换,但是状态类是context类的一个成员,他能不能将自己更换掉呢? Changestate操作附属于context类 难点在于 状态类完成操作后应自动切换状态,也就是应该由状态类来完成状态切换,但是状态类是context类的一个成员,他能不能将自己更换掉呢?解决方法就是将state类作为context类的友元,是的state类能调用changestate() 为兼容性考虑 为兼容性考虑 * 状态模式也可以由内部成员变量表示状态,然后由条件分支语句根据状态选择行为! Tcpstate友元可访问tcpconnection的changestate私有操作 * 每个状态实例都具有唯一的状态和操作,故改变状态实例,即完成了根据条件转移状态的目的,也就不需要条件分支语句了。 将this作为参数传递给state中的操作,是因为完成操作之后,this所代表的tcpconnection可能需要改变状态 因为tcpstate是tcpconnection的友元,所以可以操作其私有的changstate操作 * 课堂练习:画出状态转换图 这个例子中将状态操作放在context类中,状态类去调用其而已 为什么A1,A2会有不同的Am操作?原因在于系统扩展的需求,A2想有一个与A1的A1m()操作不同的操作,故而有了一个自己的A2m操作。 这种方式虽然完成了系统的扩展,但是给使用带来的困难,也就是我们需要判断是哪种子类,然后决定调用哪种方法。 这样就违反了里氏替换原则,失去了面向接口编程的优势。但是这种不得已的做法在实际系统中常常发生 没有用到多态这样高级的OOP思想 没有用到多态这样高级的OOP思想 用了多态,visitor可以根据传进来的不同的子类,自动完成对对应子类的操作的调用 幻灯中的例子是针对第一种情况的 书上的例子是针对第三中情况的 * 从Itest继承Accept 从ITest1继承 * * 考虑增加一个itest3的情况 7.9.3 中介者模式的结构和参与者 Mediator(中介者) 中介者定义一个接口用于与各同事(Colleague)对象通信。 ConcreteMediator(具体中介者) 具体中介者通过协调各同事对象实现协作行为;维护每个需要协调的同事的引用。 Colleague Class(同事类) 每个同事类维护一个中介者对象的引用;每个同事对象在需要与其他的同事通信时,与中介者通信。 7.9.4 应用举例 用Mediator模式解决前述问题的UML图 7.9.4 应用举例 class Mediator { public: virtual ~Mediator(); virtual void WidgetChanged(Widget*) = 0; protected: Mediator(); virtual void CreateWidgets() = 0; }; class Widget { public: Widget(Mediator*); virtual void Changed(); private: Mediator* mediator; }; void Widget::Changed() { mediator-WidgetChanged(this); } Widget::Widget(Mediator* med) { mediator = med; } class ListBox : public Widget { public: Listbox(Mediator*); virtual const char

文档评论(0)

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

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

1亿VIP精品文档

相关文档