java_中介者模式

前言

  最近小咸儿又开始和小伙伴们一起学习设计模式了,这次的学习其实是建立在之前的几次学习之上的,所以很多内容理解起来更加的快速和深入了,所以小咸儿先来总结一波儿~~


叙述

宝图

在这里插入图片描述

定义

  使用中介者模式来集中相关对象之间复杂的沟通和控制方式。也就是说:用一个中介者对象来封装一系列对象的交互,从而达到使对象之间松耦合的效果。

优点
  • 通过将对象彼此解耦,可以增加对象的复用性
  • 通过将控制逻辑集中,可以简化系统维护
  • 可以让对象之间所传递的消息变得简单而且大幅减少
用途和缺点
  • 中介者尝尝被用来协调相关的GUI组件
  • 中介者模式的缺点是,如果设计不当,中介者对象本身会变得过于复杂
实例

  在实例中,有一个公司,每个同事都和其他的同事直接关联,如果有什么交接工作的话也会自己去直接找他,日久天长之后,发现每个人需要负责联系的人都太多了,而且很容易负责的工作都搞不清,无法进行正常的交接。这个时候中介者出现了,同事们不在关心,我需要和谁进行交接,直接关心中介者就好了,我说的话,做的事情,中介者会负责帮我传递的,这样大家就职责清晰了。接下来就是具体的代码实现:

代码实现

  Mediator:中介者定义一个接口用于与各个同事对象(Colleague)通信

package pattern.builder.mediator;

/**
 * 定义抽象Mediator,可以与同事们进行联络
 * @author Phyllis
 * @date 2019年6月30日17:05:00
 */
public abstract class Mediator {
    /**
     * 转达通信
     * @param content 通信内容
     * @param coll 谁传达的
     */
    public abstract void contact(String content, Colleague coll);
}

  ConcreteMediator:具体中介者通过协调各个同事对象实现协作行为,了解并维护它的各个同事

package pattern.builder.mediator;

/**
 * 具体中介者类
 * @author Phyllis
 * @date 2019年6月30日17:32:08
 */
public 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, Colleague coll) {
        if (coll == collA){
            collB.getMessage(content);
        }else {
            collA.getMessage(content);
        }
    }
}

  ConcreteMediator:抽象同事类

package pattern.builder.mediator;

/**
 * 定义抽象同事类
 * @author Phyllis
 * @date 2019年6月30日17:06:28
 */
public abstract class Colleague {
    protected String name;
    protected Mediator mediator;

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

  ConcreteMediator:具体同事类。每个具体同事类都只需要知道自己的行为即可,但是都需要认识中介者

  • 具体同事A:
package pattern.builder.mediator;

/**
 * 具体同事A
 * @author Phyllis
 * @date 2019年6月30日17:09:13
 */
public class ColleagueA extends Colleague{
    /**
     * 具体同事类继承自Colleague,此刻就可以与中介者mediator进行通信了
     * @param name 姓名
     * @param mediator  中介者
     */
    public ColleagueA(String name, Mediator mediator){
        super(name,mediator);
    }
    public void getMessage(String message){
        System.out.println("同事A"+name+"获得信息:"+message);
    }

    /**
     * 同事A与中介者通信
     * @param message 通信内容
     */
    public void contact(String message){
        mediator.contact(message,this);
    }
}
  • 具体同事B:
package pattern.builder.mediator;

/**
 * 具体同事B
 * @author Phyllis
 * @date 2019年6月30日17:15:54
 */
public class ColleagueB extends Colleague{
    /**
     * 具体同事类继承自Colleague,此刻就可以与中介者mediator进行通信了
     * @param name 姓名
     * @param mediator 中介者
     */
    public ColleagueB(String name, Mediator mediator){
        super(name,mediator);
    }

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

    /**
     * 同事B与中介者通信
     * @param message 信息
     */
    public void contact(String message){
        mediator.contact(message,this);
    }
}

总结

  中介者模式其实就是找了一个中间人,大家都不互相联系了,直接和中间人联系,做什么事情也让他代为传达,以达到解耦的目的,但是在日常使用起来还是有很多需要注意的地方,一不小心这个中间人就会过于复杂。

感谢您的阅读~~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值