Java设计模式-中介者模式

文章目录

背景

对情报的掌控程度决定着战争的胜负。我方有这样一个传奇般的间谍,同时为我方和敌方担任间谍,她的名字叫拉米亚。
我大概讲下她的传奇故事:首先声明,拉米亚不是人,不是骂她,她真的不是人。她是由影镜军团创造的人造人。一开始为影镜军团效力,后来作为间谍跑去了联邦军,在联邦军收集情报。在联邦军的时候又为联邦军搜集影镜军团的情报。由于被联邦军的正义打动,内心一直效力于联邦军。
所以我们就把她当成联邦军和影镜军团的信使((((φ(◎ロ◎;)φ))))。

实现

组织:有内部消息和外部情报

public abstract class Org {

    /**
     * 内部消息
     */
    private String internalMessage;
    
    /**
     * 外部消息,又情报
     */
    private String externalMessage;

    public String getInternalMessage() {
        return internalMessage;
    }

    public void setInternalMessage(String internalMessage) {
        this.internalMessage = internalMessage;
    }

    public String getExternalMessage() {
        return externalMessage;
    }

    public void setExternalMessage(String externalMessage) {
        this.externalMessage = externalMessage;
    }

    public abstract void showInternalMessage();
    
    public abstract void showExternalMessage();
}

联邦军

/**
 * 联邦军
 */
public class Federation extends Org {

    @Override
    public void showInternalMessage() {
        System.out.println("这里是联邦军内部,得到军团内部的消息:");
        System.out.println(getInternalMessage());
    }

    @Override
    public void showExternalMessage() {
        System.out.println("这里是联邦军内部,得到来自间谍的消息:");
        System.out.println(getExternalMessage());
    }

}

影镜军团

/**
 * 影镜军团
 */
public class ShadowMirror extends Org {

    @Override
    public void showInternalMessage() {
        System.out.println("这里是影镜军团内部,得到军团内部的消息:");
        System.out.println(getInternalMessage());
    }

    @Override
    public void showExternalMessage() {
        System.out.println("这里是影镜军团内部,得到来自间谍的消息:");
        System.out.println(getExternalMessage());
    }
}

间谍接口

public interface ISpy {

    /**
     * 泄露消息出去
     */
    void revealMessage();
}

拉米亚

/**
 * 拉米亚:很特殊的身份,同时作为联邦军和影镜军团的间谍,但实际上拉米亚是比较偏袒联邦军的,
 * 情报必须真实,不然容易被察觉,所以拉米亚一般提供联邦军不是很重要的情报,而影镜的重要情报会毫无保留的提供给联邦军。
 */
public class Ramia implements ISpy {
    
    private Federation federation;
    
    private ShadowMirror shadowMirror;

    public Ramia(Federation federation, ShadowMirror shadowMirror) {
        super();
        this.federation = federation;
        this.shadowMirror = shadowMirror;
    }

    @Override
    public void revealMessage() {
        shadowMirror.setExternalMessage(federation.getInternalMessage());
        shadowMirror.showExternalMessage();
        System.out.println("---------------");
        federation.setExternalMessage(shadowMirror.getInternalMessage());
        federation.showExternalMessage();
    }
    
}

测试

public class Test {
    
    public static void main(String[] args) {
        Federation federation = new Federation();
        federation.setInternalMessage("今晚8点我们将举行一个生日晚会!");
        
        ShadowMirror shadowMirror = new ShadowMirror();
        shadowMirror.setInternalMessage("我们打算12月12号那天偷袭联邦军总部!");
        
        ISpy ramia = new Ramia(federation, shadowMirror);
        ramia.revealMessage();
    }
    
}

测试结果

这里是影镜军团内部,得到来自间谍的消息:
今晚8点我们将举行一个生日晚会!
---------------
这里是联邦军内部,得到来自间谍的消息:
我们打算12月12号那天偷袭联邦军总部!
总结

中介者模式对对象之间的交互进行了解耦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值