设计模式之中介者模式

中介者模式,又称为调停者模式或调解者模式

1.中介者模式结构图

  1. 示例代码

    // 抽象中介类
    public abstract class Mediator {
    
        protected ConcreteColleagueA concreteColleagueA;
    
        protected ConcreteColleagueB concreteColleagueB;
    
        public void setConcreteColleagueA(ConcreteColleagueA concreteColleagueA) {
            this.concreteColleagueA = concreteColleagueA;
        }
    
        public void setConcreteColleagueB(ConcreteColleagueB concreteColleagueB) {
            this.concreteColleagueB = concreteColleagueB;
        }
    
        public abstract void methodA();
    
        public abstract void methodB();
    }
    
    // 具体中介类
    public class ConcreteMediator extends Mediator{
    
        public void methodA(){
            concreteColleagueB.doWorkB();
        }
    
        public void methodB(){
            concreteColleagueA.doWorkA();
        }
    }
    
    
    // 抽象同事类
    public abstract class Colleague {
    
        protected Mediator mediator;
    
        public Colleague(Mediator mediator) {
            this.mediator = mediator;
        }
    }
    
    // 具体同事类A
    public class ConcreteColleagueA extends Colleague{
    
        public ConcreteColleagueA(Mediator mediator) {
            super(mediator);
        }
    
        public void selfMethodA(){
            mediator.methodA();
        }
    
        public void doWorkA(){
            System.out.println("具体处理对象A开始处理问题");
        }
    }
    
    // 具体同事类B
    public class ConcreteColleagueB extends Colleague{
    
        public ConcreteColleagueB(Mediator mediator) {
            super(mediator);
        }
    
        public void selfMethodB(){
            mediator.methodB();
        }
    
        public void doWorkB(){
            System.out.println("具体处理对象B开始处理问题");
        }
    }
    
    // 测试类
    public class MediatorTest {
    
        public static void main(String[] args) {
            ConcreteMediator mediator = new ConcreteMediator();
            ConcreteColleagueA colleagueA = new ConcreteColleagueA(mediator);
            ConcreteColleagueB colleagueB = new ConcreteColleagueB(mediator);
            mediator.setConcreteColleagueA(colleagueA);
            mediator.setConcreteColleagueB(colleagueB);
    
            colleagueA.selfMethodA();
        }
    }
    
    
    1. 总结:

      优点:由多对多关系转化为一对多,降低了类间的耦合,符合迪米特法则;

      缺点:当同事类复杂较多时,中介者就会变得臃肿且不易维护.

posted @ 2021-04-16 23:26  justKen  阅读(57)  评论(0编辑  收藏  举报