第七章 行为型设计模式.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.9.1 中介者模式的由来 7.9.1 中介者模式的由来 7.9.1 中介者模式的由来 7.9.1 中介者模式的由来 幻灯中的例子是针对第一种情况的 书上的例子是针对第三中情况的 * 从Itest继承Accept 从ITest1继承 * 7.10.3 策略模式的结构和参与者 Strategy模式结构图 7.10.3 策略模式的结构和参与者 Strategy(策略) 定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法。 ConcreteStrategy(具体策略) 以Strategy接口实现某具体算法。 Context(上下文) 用一个ConcreteStrategy对象来配置;维护一个对Strategy对象的引用;可定义一个接口来让Strategy访问它的数据。 7.10.4 模式的实现 用Strategy模式解决前述问题的UML图 7.10.4 模式的实现 class PointArray { public: PointArray(Strategy*); virtual void Sort(); private: ArrayPoint,Point pointlist; Strategy * _strategy; }; PointArray::PointArray(Strategy* _stg) { _strategy = _stg; } void PointArray::Sort() { _strategy-SortAlgrithm(); } class Strategy { public: Strategy(); virtual void SortAlgrithm(); }; class ConcreteStrategyA : public Strategy { public: ConcreteStrategyA(); virtual void SortAlgrithm(); }; void ConcreteStrategyA::SortAlgrithm() { //依据每个Point对象的x值大小排序 } class ConcreteStrategyB : public Strategy { public: ConcreteStrategyB(); virtual void SortAlgrithm(); }; void ConcreteStrategyB::SortAlgrithm() { //依据每个Point对象的y值大小排序 } 7.10.4 模式的实现 class ConcreteStrategyC : public Strategy { public: ConcreteStrategyC(); virtual void SortAlgrithm(); }; void ConcreteStrategyC::SortAlgrithm() { //依据每个Point对象到原点的距离大小排序 } int main() { PointArray* pa = new PointArray(new ConcreteStrategyA()); pa-Sort(); } 7.10.5 效果说明 1)算法和使用算法的对象相互分离,客户程序可以在运行时动态选择算法,代码复用性好,便于修改和维护。 2)用组合替代了继承,效果更好。如果从Context直接生成各个子类,每个子类的区别是方法的算法不同,这样也可以实现对象方法的多种算法,但继承使子类和父类紧密耦合,使Context类难以理解、难以维护和难以扩展。而策略模式采用组合的方式,组合使Context和Strategy之间的依赖很小,更利于代码复用。 7.10.5 效果说明 3)消除了冗长的条件语句序列,将不同的算法硬编码进一个类中,选择不同的算法必然要使用冗长的条件语句序列,采用策略模式将算法封装在一个个独立的Strategy类中消除了这些条件语句。 4)算法的动态选择,Strategy模式可以提供相同行为的不同实现,客户可以根据不同的上下文从不同的策略中选择算法。 5)客户必须了解不同的Strategy,一个客户要选择一个合适的Strategy就必须知道这些Strategy到底有什么不同。 7.10.5 效果说明 6)Strategy和Context之间的通信开销加大,根据算法的需要,Context必须向每个不同的具体Strategy类实例传递不同的参数,因此Strategy接口就要传递所有这些不同参数的集合,导致Context会创建和传递一些永远用不到的参数。 7)增加了类和对象的数目,因为各种算法被抽取出来单独成类,导致了对象数目增加,这种情况在算法较多时变得更加严重。

文档评论(0)

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

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

1亿VIP精品文档

相关文档