23种设计模式之中介者模式(18)

中介者模式通过创建一个中介对象,集中管理多个对象之间的交互,降低了它们之间的耦合。然而,这可能导致中介者自身变得复杂。示例展示了如何使用Java实现中介者模式,包括抽象中介类、具体中介实例、同事抽象类以及两个具体的同事类。在Main类中,中介者协调两个同事类的消息传递。
摘要由CSDN通过智能技术生成
  • 中介者模式(Mediator),用一个中介对象来封装一系列对象交互。中介者使各对象不需要显示地相互引用,从而使耦合松散,而且可以独立地改变他们之间的交互。

  • 由于ConcreteMediator控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者会变得比任何一个ConcreteColleague都复杂。

  • 中介者模式的优点来自集中控制,其缺点也是他。
    在这里插入图片描述

  • Mediator.java

    /**
     * 抽象中介类
     */
    public abstract class Mediator {
        public abstract void send(String message,Colleague colleague);
    }
    
  • ConcreteMediator .java

    /**
     * 中介实例类
     */
    public class ConcreteMediator extends Mediator{
    
        private ConcreteColleague1 concreteColleague1;
        private ConcreteColleague2 concreteColleague2;
    
        public void setConcreteColleague1(ConcreteColleague1 concreteColleague1) {
            this.concreteColleague1 = concreteColleague1;
        }
    
        public void setConcreteColleague2(ConcreteColleague2 concreteColleague2) {
            this.concreteColleague2 = concreteColleague2;
        }
    
        @Override public void send(String message, Colleague colleague) {
            if (colleague == concreteColleague1) {
                concreteColleague2.notify(message);
            }else {
                concreteColleague1.notify(message);
            }
        }
    }
    
  • Colleague.java

    /**
     * 同事抽象类
     */
    public abstract class Colleague {
        protected Mediator mediator;
    
        public Colleague(Mediator mediator) {
            this.mediator = mediator;
        }
    }
    
  • ConcreteColleague1.java

    public class ConcreteColleague1 extends Colleague {
        public ConcreteColleague1(Mediator mediator) {
            super(mediator);
        }
        public void send(String message) {
            mediator.send(message, this);
        }
    
        public void notify(String message) {
            System.out.println("同事1得到消息:" + message);
        }
    }
    
  • ConcreteColleague2.java

    public class ConcreteColleague2 extends Colleague {
        public ConcreteColleague2(Mediator mediator) {
            super(mediator);
        }
        public void send(String message) {
            mediator.send(message, this);
        }
    
        public void notify(String message) {
            System.out.println("同事2得到消息:" + message);
        }
    }
    
  • Main.java

    public class Main {
        public static void main(String[] args) {
            final ConcreteMediator m = new ConcreteMediator();
            final ConcreteColleague1 c1 = new ConcreteColleague1(m);
            final ConcreteColleague2 c2 = new ConcreteColleague2(m);
    
            m.setConcreteColleague1(c1);
            m.setConcreteColleague2(c2);
    
            c1.send("吃过饭了么");
            c2.send("没有呢");
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值