zoukankan      html  css  js  c++  java
  • 设计模式--中介者模式C++实现

    中介者模式C++实现

    1定义

    用一个中介对象封装一系列的对象交互,中介者使各个对象不需要显示的相互作用,从而使其耦合松散,而且可以独立的改变他们之间的交互

    2类图

    组成说明

    Mediator抽象中介者角色,定义统一接口,用于各个同事角色之间的通信

    ConcreteMediator具体中介者角色,通过协调各个同事角色实现协作行为,依赖于各个同事

    Colleague同事角色,每个同事角色都应该知道中介的存在,且同事间通信一定是通过中介协作;同事行为分:自发行为,依赖行为。

    3实现

    class Mediator

    {

    protected:

      Mediator();

    public:

      virtual ~Mediator()=0;

    protected:

      ConcreteColleague1 c1;

      ConcreteColleague2 c2;

    public:

      ConcreteColleague1 *getC1()

      {

        return c1;

      }

      ConcreteColleague2 *getC2()

      {

        return c2;

      }

      virtual void doSomething1() = 0;

      virtual void doSomething2() = 0;

    };

    //中介者

    class ConcreteMediator:public Mediator

    {

    public:

      void doSomething1()

      {}

      void doSomething2()

      {}

    };

    class Colleague

    {

    public:

      Colleague(Mediator me)

      :mediator(me)

      {}

    public:

      virtual ~Colleague()=0;

    protected:

      Mediator mediator;

    };

    class ConcreteColleague1: public Colleague

    {

    public:

      ConcreteColleague1(Mediator me)

      :Colleague(me)

      {} 

      void Self_method1()

      {}

      //依赖方法

      void depMethod1()

      {

        //处理自己的业务

        //自己不能够处理的业务交给中介,让其进行通信协作

        mediator.doSomething2();

      }

    };

    class ConcreteColleague2: public Colleague

    {

    public:

      ConcreteColleague2(Mediator me)

      :Colleague(me)

      {}

      void Self_method2()

      {}

      //依赖方法

      void depMethod2()

      {

        //处理自己的业务

        //自己不能够处理的业务交给中介,让其进行通信协作

        mediator.doSomething2();

      }

    };

    注:同事类使用构造函数注入中介者,而中介者使用setter/getter注入同事类,因为同事类必须有中介者,而中介者只有部分同事类

    4应用

    ①优点

    减少类间依赖,把一对多的依赖转变成一对一。同事类只依赖中介,降低类间耦合

    ②缺点,中介者会随着同事类的增多,逻辑越来越复杂

    5使用场景

    简单但是不容易使用的一个模式。把握一个准则:当类图中出现蜘蛛网时,尝试使用中介者

    实际应用:机场调度中心,MVC框架中的C(Controller),媒体网关,中介服务。

    6提示-最佳使用

    N个对象间产生依赖关系(N>2)

    多个对象有依赖关系,但是尚不确定或者有发生改变的可能,使用中介者降低风险扩散

    产品开发:eg MVC框架。把中介者模式应用到产品中,可以提升产品性能和扩展性,但是对项目就未必。项目是以支付投产为目标,而产品则是以稳定,高效扩展为宗旨。

  • 相关阅读:
    loadrunner-27796错误寻求解决办法
    LR常用函数整理
    Ajax本地跨域问题 Cross origin requests are only supported for HTTP
    Sublime Text 2 安装emmet插件和常用快捷键
    如何设置静态内容缓存时间
    怎么看网站是否开启CDN加速?测试网站全国访问速度方法详解
    python 多线程就这么简单(转)
    (转)浅谈ASP.NET报表控件
    (转)第一天 XHTML CSS基础知识 文章出处:标准之路(http://www.aa25.cn/div_css/902.shtml)
    详解CSS选择器、优先级与匹配原理
  • 原文地址:https://www.cnblogs.com/lang5230/p/5324524.html
Copyright © 2011-2022 走看看