设计模式------中介者模式

一、 定义
中介者模式(Mediator),用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。
中介者减少了其他一系列对象的交互,但是由于对其他一系列对象控制集中到了中介者类上,如果此类出现问题,则整个系统都会出问题。选用中介者模式要考虑清楚,尤其是多对多的关系时。
二、 结构图
在这里插入图片描述

三、 示例代码(以联合国为中介者,发布其他国家的声明)

package org.example.mediatormodel;

public interface Mediator {

    public void Declare(String mes,Country ct);
}

package org.example.mediatormodel;

public abstract class Country {

      private String ctName="";
        private String mes;
        private Mediator mediator;
//    public abstract void SetMediator(Mediator mediator);
      public abstract void Declare(String mes,Mediator mediator);
      public abstract void GetMessage(String mes);

    public String getCtName() {
        return ctName;
    }

    public void setCtName(String ctName) {
        this.ctName = ctName;
    }

    public Mediator getMediator() {
        return mediator;
    }

    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }

    public String getMes() {
        return mes;
    }

    public void setMes(String mes) {
        this.mes = mes;
    }
}

package org.example.mediatormodel;

public class USA extends Country {

//    private String mes;
//    private Mediator mediator;
//    public void SetMediator(Mediator mediator){
//       super.getMediator() = mediator;
//    }
    @Override
    public void Declare(String mes,Mediator mediator) {
        setMes(mes);
        mediator.Declare(mes,this);
    }

    @Override
    public void GetMessage(String mes) {
        System.out.println("usa:" + mes);
    }
}

package org.example.mediatormodel;

public class China extends Country {

//    private String mes;
//    private Mediator mediator;
//    public void SetMediator(Mediator mediator){
//        this.mediator = mediator;
//    }

    @Override
    public void Declare(String mes, Mediator mediator) {
        setMes(mes);
        mediator.Declare(mes,this);
    }

    @Override
    public void GetMessage(String mes) {
        System.out.println("china:" + mes);
    }
}

package org.example.mediatormodel;

public class UnionMediator implements Mediator {

    private USA usa;
    private China china;


    @Override
    public void Declare(String mes,Country ct) {
        if (ct == usa){
            usa.GetMessage(mes);
        }else if (ct == china){
            china.GetMessage(mes);
        }
//        System.out.println(ct.getCtName() + "声明了" + mes);
    }

    public China getChina() {
        return china;
    }

    public void setChina(China china) {
        this.china = china;
    }

    public USA getUsa() {
        return usa;
    }

    public void setUsa(USA usa) {
        this.usa = usa;
    }
}

package org.example.mediatormodel;

public class MediatorModelTest {
    public static void main(String[] args) {
        UnionMediator um = new UnionMediator();

        USA usa = new USA();
        usa.setCtName("USA");
        usa.setMediator(um);

        China china = new China();
        china.setCtName("CHINA");
        china.setMediator(um);

        um.setUsa(usa);
        um.setChina(china);
        um.Declare("usaaaa",usa);
        um.Declare("keep peace",china);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值