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

  • 相关阅读:
    Linux-003-Resource temporarily unavailable
    JMeter学习-041-响应数据中文乱码解决方法
    Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法
    Java学习-049-正则工具类
    JMeter学习-040-JMeter图形化 HTML 报表概要说明
    JMeter学习-039-JMeter 3.0 生成 dashboard HTML 报告图表中文乱码
    JMeter学习-038-JMeter Linux 环境配置
    Linux-002-执行命令时,提示: -bash: {命令}: command not found
    JMeter学习-037-JMeter调试工具之四-BeanShell+jmeter.log
    JMeter学习-036-JMeter调试工具之三---Debug Sampler
  • 原文地址:https://www.cnblogs.com/lang5230/p/5324524.html
Copyright © 2011-2022 走看看