设计模式之中介者模式

定义(并非来自百度百科,百度没收录此词条...):
       用一个中介对象(中介者)来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式又称为调停者模式,它是一种对象行为型模式。

UML类图:

 

具体代码:

abstract public class Mediator {
    protected ArrayList<Colleague> colleagues;

    public void register(Colleague colleague) {
        colleagues.add(colleague);
    }

    public abstract void operation();
}

public class ConcreteMediator extends Mediator {
    @Override
    public void operation() {
        System.out.println("123");
        ((Colleague)(colleagues.get(0))).method1();
    }
}

abstract public class Colleague {
    protected Mediator mediator;

    public Colleague(Mediator mediator) {
        this.mediator=mediator;
    }

    public abstract void method1();

    public void method2() {
        mediator.operation();
    }
}

public class ConcreteColleague extends Colleague {
    public ConcreteColleague(Mediator mediator) {
        super(mediator);
    }

    @Override
    public void method1() {

    }
}

模块说明:
Mediator:该接口用于与各同事对象之间进行通信
ConcreteMediator:抽象中介者的子类,通过协调各个同事对象来实现协作行为,它维持了对各个同事对象的引用
Colleague:定义各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时它维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信
ConcreteColleague:它是抽象同事类的子类;每一个同事对象在需要和其他同事对象通信时,
先与中介者通信,通过中介者来间接完成与其他同事类的通信;在具体同事类中实现了在抽象同事类中声明的抽象方法

适用场景:
解决一系列对象之间复杂的耦合关系,这一系列对象往往是“多对多”的耦合关系。

优缺点:
优点:
简化了对象之间的交互
可将各同事对象解耦
减少子类生成

缺点:
中介者类中包含了大量同事之间的交互细节,可能会导致具体中介者类非常复杂,不易维护

总结:
中介者模式的本质就是封装各个同事部分的交互,统一由中介者管理

posted @ 2017-08-28 17:21  重名  阅读(187)  评论(0编辑  收藏  举报