美文网首页技术栈
2019-03-03——设计模式 中介者模式

2019-03-03——设计模式 中介者模式

作者: 烟雨乱平生 | 来源:发表于2019-03-03 18:05 被阅读0次

    特点

    定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。 在中介者模式中,各个对象不需要互相知道了解,他们只需要知道中介者对象即可,但是中介者对象就必须要知道所有的对象和他们之间的关联关系,正是因为这样就导致了中介者对象的结构过于复杂,承担了过多的职责,同时它也是整个系统的核心所在,它有问题将会导致整个系统的问题。

    主要角色

    • 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
    • 具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
    • 抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
    • 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

    实现

    public abstract class Mediator {
        public abstract void register(Colleague colleague);
        public abstract void relay(Colleague colleague);
    }
    
    
    
    public class ConcreteMediator extends Mediator {
        private List<Colleague> colleagues = new ArrayList<>();
        @Override
        public void register(Colleague colleague) {
            if(!colleagues.contains(colleague)){
                colleagues.add(colleague);
                colleague.setMediator(this);
            }
        }
    
        @Override
        public void relay(Colleague colleague) {
            for (Colleague c : colleagues){
                if(c!=colleague){
                    c.receive();
                }
            }
        }
    }
    
    
    
    @Setter
    public abstract class Colleague {
        protected Mediator mediator;
        public abstract void send();
        public abstract void receive();
    }
    
    
    public class ColleagueA extends Colleague{
        @Override
        public void send() {
            System.out.println("A发布求租消息");
            this.mediator.relay(this);
        }
    
        @Override
        public void receive() {
            System.out.println("A接收出租消息");
        }
    }
    
    
    public class ColleagueB extends Colleague{
        @Override
        public void send() {
            System.out.println("B发布出租消息");
            this.mediator.relay(this);
        }
    
        @Override
        public void receive() {
            System.out.println("B接收租房消息");
        }
    }
    

    相关文章

      网友评论

        本文标题:2019-03-03——设计模式 中介者模式

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