夜光带你走进 Java 成神之路(三十二)擅长的领域

夜光序言:

 

她注视着他的脸欣赏了好久,像黄昏的天色那样温柔和明朗。

 

正文:

                           以道御术 / 以术识道

中介者模式(Mediator)的定义

用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

中介者模式(Mediator)的适用性

1.一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。

2.一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。

3.想定制一个分布在多个类中的行为,但又不想生成太多的子类。


中介者模式(Mediator)的参与者

1.Mediator

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

2.ConcreteMediator

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

3.Colleague:

抽象同事类。

4.Colleagueclass

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


package 中介者模式.智能家庭;

//第一步:夜光    定义Mediator
public abstract class Mediator {
    //定义抽象Mediator,可以与萧炎和林动进行联络
    public abstract void contact(String content,Colleague coll);

}

package 中介者模式.智能家庭;

//夜光
//第二步:定义抽象Colleague
public abstract class Colleague {

    protected String name;  //protected 只有继承的子类可以使用
    protected Mediator mediator;  //protected 只有继承的子类可以使用

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

package 中介者模式.智能家庭;

//第三步:定义具体Colleagueclass  ColleagueA
public 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 void contact(String message){
        mediator.contact(message, this);
    }
}

package 中介者模式.智能家庭;


//第三步:定义具体Colleagueclass  ColleagueB
public class ColleagueB extends Colleague {

    public ColleagueB(String name, Mediator mediator) {
        super(name, mediator);
    }
    public void getMessage(String message){
        System.out.println("大千世界"+name+"获得信息"+message);
    }
    //这个类与中介者通信
    public void contact(String message){
        mediator.contact(message, this);
    }
}

package 中介者模式.智能家庭;

//夜光:第四步
//定义具体中介者ConcreteMediator,具体中介者通过协调各同事对象实现协作行为,了解并维护它的各个同事。
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);
        }
    }
}

package 中介者模式.智能家庭;


//第五步:定义Client
public class Client {


    // 中介者,ColleagueA、ColleagueB
    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("我是萧炎,我要和同事林动说说工作的事情");
        colleagueB.contact("我是林动,我下午有时间,下午商量吧");
    }

}

发布了1477 篇原创文章 · 获赞 281 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/weixin_41987706/article/details/103573688