• 设计模式--中介者模式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框架。把中介者模式应用到产品中,可以提升产品性能和扩展性,但是对项目就未必。项目是以支付投产为目标,而产品则是以稳定,高效扩展为宗旨。

  • 相关阅读:
    使用 Spring data redis 结合 Spring cache 缓存数据配置
    Spring Web Flow 笔记
    Linux 定时实行一次任务命令
    css js 优化工具
    arch Failed to load module "intel"
    go 冒泡排序
    go (break goto continue)
    VirtualBox,Kernel driver not installed (rc=-1908)
    go运算符
    go iota
  • 原文地址:https://www.cnblogs.com/lang5230/p/5324524.html
Copyright © 2020-2023  润新知