中介者模式

中介模式也叫中间人模式,听名字就应该知道的差不多了。下面例子中张三李四中间就有个中间人,代码如下:

public abstract class Mediator {
    public abstract void contact(String content, String name);

    public static class Colleague {
        protected String name;
        protected Mediator mediator;

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

        public void contact(String message, String name) {
            mediator.contact(message, name);
        }
    }

    public static class ColleagueA extends Colleague {

        // 具体同事类继承自Colleague,此刻就可以与中介者mediator进行通信了
        public ColleagueA(String name, Mediator mediator) {
            super(name, mediator);
        }

        public void getMessage(String message) {
            System.out.println(name + "获得信息:" + message);
        }
    }

    public static class ColleagueB extends Colleague {

        public ColleagueB(String name, Mediator mediator) {
            super(name, mediator);
        }

        public void getMessage(String message) {
            System.out.println(name + "获得信息:" + message);
        }

    }

    //定义具体中介者ConcreteMediator,具体中介者通过协调各同事对象实现协作行为,了解并维护它的各个同事。
    public static class ConcreteMediator extends Mediator {
        ColleagueA collA;
        ColleagueB collB;

        public ColleagueA getCollA() {
            return collA;
        }

        public void setCollA(ColleagueA collA) {
            this.collA = collA;
        }

        public ColleagueB getCollB() {
            return collB;
        }

        public void setCollB(ColleagueB collB) {
            this.collB = collB;
        }

        @Override
        public void contact(String content, String name) {
            if (Objects.equals(name, collA.name)) {
                collA.getMessage(content);
            } else if (Objects.equals(name, collB.name)) {
                collB.getMessage(content);
            }
        }
    }

    public static void main(String[] args) {
        // 定义中介者
        ConcreteMediator mediator = new ConcreteMediator();
        // 定义具体同事类
        ColleagueA colleagueA = new ColleagueA("张三", mediator);
        ColleagueB colleagueB = new ColleagueB("李四", mediator);
        // 中介者知晓每一个具体的Colleague类
        mediator.setCollA(colleagueA);
        mediator.setCollB(colleagueB);
        colleagueA.contact("我是张三,我要和同事B说说工作的事情", "李四");
        colleagueB.contact("我是李四,我下午有时间,下午商量吧", "张三");
//        colleagueC.contact("我是老板,下午开个会", "公司所有人"); //老板只说公司所有人,中间人会挨个通知
    }
}
输出:
李四获得信息:我是张三,我要和同事B说说工作的事情
张三获得信息:我是李四,我下午有时间,下午商量吧

那问题来了,张三直接通知李四不更好吗。是的,但如果是老板要开会呢?总不能让老板挨个告诉吧。所以有了注释了的那句,所以一般老板有助理。有兴趣的试着补全代码。

觉得容易理解的话面向对象的23种设计模式点这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值