美文网首页
设计模式之中介者模式

设计模式之中介者模式

作者: 老羊_肖恩 | 来源:发表于2017-06-07 16:19 被阅读28次

    终结者模式的定义:Define an object that encapsulates how a set of objects interact.Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently. 即:用一个中介对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变他们之间的相互关系。
    中介者模式通用类图如下:

    Mediator.jpg

      从类图中可以看出,终结者模式由以下几个部分组成:

    • Mediator 抽象终结者角色。抽象中介者定义同意的接口,用于各同事角色直接通信。
    • ConcreteMediator 具体中介者角色。具体中介者角色通过协调各同事角色实现协助行为,因此它必须依赖于各个同事角色。
    • Colleague 同事角色。每个同事角色都知道中介者角色,而且与其他的同事角色通信的时候,一定要通过中介者角色协作。每个同事类的行为分为两种:一种是自身的行为,这种行为叫做自发方法,与其他同事或中介没有任何依赖;第二种是必须依赖中介者才能完成的行为,叫做依赖方法。
      中介者模式的通用代码如下:
    public abstract class Colleague {
        protected Mediator mediator;
        public Colleague(Mediator mediator){
            this.mediator = mediator;
        }
        
        public abstract void selfMethod();
        
        public abstract void depMethod();
        
    }
    
    public class ConcreteColleague1 extends Colleague{
    
        //通过构造函数传递中介者
        public ConcreteColleague1(Mediator mediator) {
            super(mediator);
        }
    
        //自有方法
        @Override
        public void selfMethod() {
            System.out.println("ConcreteColleague1 处理自己的业务逻辑...");
        }
    
        //依赖方法
        @Override
        public void depMethod() {
            System.out.println("ConcreteColleague1 委托中介处理业务逻辑...");
            super.mediator.doSomething();
        }
        
    }
    
    public class ConcreteColleague2 extends Colleague{
    
        //通过构造函数传递中介者
        public ConcreteColleague2(Mediator mediator) {
            super(mediator);
        }
    
        //自有方法
        @Override
        public void selfMethod() {
            System.out.println("ConcreteColleague1 处理自己的业务逻辑...");
        }
    
        //依赖方法
        @Override
        public void depMethod() {
            System.out.println("ConcreteColleague1 委托中介处理业务逻辑...");
            super.mediator.doSomething();
        }
        
    }
    public abstract class Mediator{
        //定义同事类
        protected ConcreteColleague1 c1;
        protected ConcreteColleague2 c2;
        
        //通过getter/setter方法把同事类注入进来
        public ConcreteColleague1 getC1() {
            return c1;
        }
        public void setC1(ConcreteColleague1 c1) {
            this.c1 = c1;
        }
        public ConcreteColleague2 getC2() {
            return c2;
        }
        public void setC2(ConcreteColleague2 c2) {
            this.c2 = c2;
        }
        
        //中介者模式的业务逻辑
        public abstract void doSomething();
    }
    
    public class ConcreteMediator extends Mediator{
    
        @Override
        public void doSomething() {
            super.c1.selfMethod();
            super.c2.selfMethod();
        }
        
    }
    
    

    中介者模式的应用

    中介者模式的优点

    中介者模式的优点就是减少同事类之间的依赖,把原有的一对多的依赖关系变成了一对一的依赖关系。当然,也降低了同事类之间的耦合。

    中介者模式的缺点

    中介者模式的最大缺点就是中介者逻辑复杂,而且依赖的同事类越多,中介者的逻辑就越复杂。

    中介者模式的使用场景

    中介者模式适用于多个对象之间紧密耦合的情况,紧密耦合的标准是:在类图中出现了蜘蛛网状结构,这种情况下,使用中介者模式有利于把蜘蛛网结构梳理为星形结构。

    《注》以上内容总结自秦小波-《设计模式之禅》,仅为个人学习笔记。

    相关文章

      网友评论

          本文标题:设计模式之中介者模式

          本文链接:https://www.haomeiwen.com/subject/nkxafxtx.html