• 中介者模式


    定义:中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使它们可以松散耦合。

    当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。

    使用场景: 
    当对象之间的交互操作很多且每个对象的行为操作都依赖彼此时,为防止在修改一个对象的行为时,同时涉及很多其

    他对象的行为,可使用中介者模式。

    UML图

    这里写图片描述

    Mediator:抽象中介者角色,定义了同事对象到中介者对象的接口,一般以抽象类的方式实现。

    ConcreteMediator:具体中介者角色,继承于抽象中介者,实现了父类定义的方法,它从具体的同事对象接受消息,向具体同事对象发出命令。

    Colleague:抽象同事类角色,定义了中介者对象的接口,它只知道中介者而不知道其他的同事对象。

    ConcreteColleague:具体同事类角色,继承于抽象同事类,每个具体同事类都知道本身在小范围的行为,而不知道在大范围内的目的。

    代码:

    public abstract class Colleague {
        //抽象同事类
    
        protected Mediator mediator;
    
        public void setMediator(Mediator mediator) {
            this.mediator = mediator;
        }
    
        public abstract void operation();
    }
        
    

      

    public class ConcreteColleagueA extends Colleague{
       //具体同事类
        public void notifyColleagueB() {
            mediator.notifyColleagueB();
        }
    
        @Override
        public void operation() {
            System.out.print("this is ConcreteColleagueA's operation
    ");
        }
    }
    

      

    public abstract class Mediator {
        //抽象中介者类
        protected Colleague colleagueA;
        protected Colleague colleagueB;
    
        public Mediator(Colleague colleagueA, Colleague colleagueB) {
            this.colleagueA = colleagueA;
            this.colleagueB = colleagueB;
        }
    
        public abstract void notifyColleagueA();
        public abstract void notifyColleagueB();
    }
    

      

    public class ConcreteMediator extends Mediator{
        //具体中介者类
        public ConcreteMediator(Colleague colleagueA, Colleague colleagueB) {
            super(colleagueA, colleagueB);
        }
    
        @Override
        public void notifyColleagueA() {
            if (colleagueA != null) {
                colleagueA.operation();
            }
        }
    
        @Override
        public void notifyColleagueB() {
            if (colleagueB != null) {
                colleagueB.operation();
            }
        }
    }
    

      

    public class Client {
        public static void main(String[] args) {
            Colleague colleagueA = new ConcreteColleagueA();
            Colleague colleagueB = new ConcreteColleagueB();
    
            Mediator mediator = new ConcreteMediator(colleagueA, colleagueB);
            colleagueA.setMediator(mediator);
            colleagueB.setMediator(mediator);
    
            ((ConcreteColleagueA)colleagueA).notifyColleagueB();
            ((ConcreteColleagueB)colleagueB).notifyColleagueA();
        }
    }
    

      优点:

        适当地使用中介者模式可以避免同事类之间的过度耦合,使得各同事类之间可以相对独立地使用。

        使用中介者模式可以将对象的行为和协作进行抽象,能够比较灵活的处理对象间的相互作用。

        使用中介者模式可以将对象间多对多的关联转变为一对多的关联,使对象间的关系易于理解和维护。

      缺点:

        中介者模式是一种比较常用的模式,也是一种比较容易被滥用的模式。对于大多数的情况,同事类之间的关系不会复杂到混乱不堪的网状结构,

    因此,大多数情况下,将对象间的依赖关系封装的同事类内部就可以的,没有必要非引入中介者模式。滥用中介者模式,只会让事情变的更复杂。

    所以,我们决定使用中介者模式之前要多方考虑、权衡利弊。

    转自https://blog.csdn.net/u012124438/article/details/70474166

     

  • 相关阅读:
    【胡策篇】题目
    【学术篇】luogu3768 简单的数学题(纯口胡无代码)
    【学术篇】规律选手再次证明自己(舒老师的胡策题 T2 LX还在迷路)
    【模板篇】Link Cut Tree模板(指针)
    【学术篇】51nod 1238 最小公倍数之和
    【学术篇】2.28测试T2 线段 拓扑排序
    【学术篇】SPOJ FTOUR2 点分治
    【颓废篇】Py:从零开始的poj自动提交
    【学术篇】CF935E Fafa and Ancient Mathematics 树形dp
    安卓启动图去除顶部title和状态栏
  • 原文地址:https://www.cnblogs.com/a863886199/p/10165501.html
Copyright © 2020-2023  润新知