大话设计模式-中介者模式学习总结

一、概念

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

二、类图及基本代码

这里写图片描述

//抽象中介者类
public abstract class Mediator {
    //定义一个抽象的发送消息方法,得到同事对象和发送消息
    public abstract void Send(String message,Colleague colleague);

}

//具体中介者类
public class ConcreteMediator extends Mediator{
    private ConcreteColleague1 colleague1;
    private ConcreteColleague2 colleague2;



    public void setColleague1(ConcreteColleague1 colleague1) {
        this.colleague1 = colleague1;
    }



    public void setColleague2(ConcreteColleague2 colleague2) {
        this.colleague2 = colleague2;
    }



    @Override
    public void Send(String message, Colleague colleague) {
        if(colleague==colleague1){
            colleague2.Notify(message);
        }else{
            colleague1.Notify(message);
        }
    }

}

//抽象同事类
public abstract class Colleague {
    protected Mediator mediator;

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

}
//具体同事类
public class ConcreteColleague1 extends Colleague{

    public ConcreteColleague1(Mediator mediator) {
        super(mediator);
    }

    public void send(String message){
        mediator.Send(message, this);
    }

    public void Notify(String message){
        System.out.println("同事1得到的信息:"+message);
    }

}

public class ConcreteColleague2 extends Colleague{

    public ConcreteColleague2(Mediator mediator) {
        super(mediator);
    }

    public void send(String message){
        mediator.Send(message, this);
    }

    public void Notify(String message){
        System.out.println("同事2得到的信息:"+message);
    }

}
public class Client {
    public static void main(String[] args) {
        ConcreteMediator mediator=new ConcreteMediator();
        ConcreteColleague1 colleague1=new ConcreteColleague1(mediator);
        ConcreteColleague2 colleague2=new ConcreteColleague2(mediator);

        mediator.setColleague1(colleague1);
        mediator.setColleague2(colleague2);

        colleague1.send("你吃了吗");
        colleague2.send("没呢,正准备吃");


    }

}

三、实例之联合国

//联合国
public abstract class UnitedNations {
    public abstract void Declare(String message,Country colleague);
}
//联合国安全理事会
public class UnitedNationsSecurityCouncil extends UnitedNations{
    private USA usa;
    private Iraq iraq;



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



    public void setIraq(Iraq iraq) {
        this.iraq = iraq;
    }



    @Override
    public void Declare(String message, Country colleague) {
        if(colleague==usa){
            iraq.GetMessage(message);
        }else{
            usa.GetMessage(message);
        }
    }

}
//抽象国家类
public abstract class Country {
    protected UnitedNations unitedNations;

    public Country(UnitedNations unitedNations) {
        this.unitedNations = unitedNations;
    }

}
//美国
public class USA extends Country {

    public USA(UnitedNations unitedNations) {
        super(unitedNations);
    }

    public void Declare(String message) {
        unitedNations.Declare(message, this);
    }

    public void GetMessage(String message) {
        System.out.println("美国获得对方信息:" + message);
    }

}
//伊拉克
public class Iraq extends Country{

    public Iraq(UnitedNations unitedNations) {
        super(unitedNations);
    }

    //声明
    public void Declare(String message){
        unitedNations.Declare(message, this);
    }


    public void GetMessage(String message){
        System.out.println("伊拉克获得对方信息:"+message);
    }

}
public class Client {
    public static void main(String[] args) {
        UnitedNationsSecurityCouncil uCouncil=new UnitedNationsSecurityCouncil();
        USA usa=new USA(uCouncil);
        Iraq iraq=new Iraq(uCouncil);

        uCouncil.setUsa(usa);
        uCouncil.setIraq(iraq);

        usa.Declare("不准研制核武器");
        iraq.Declare("我们没有核武器QAQ");

    }

}

四、总结

好处:
中介者模式有利于各同事之间的松耦合,因此可以独立地改变和复用各同事和中介者,便于维护和拓展。
坏处:
因为把控制集中到了中介者,所以中介者变得复杂,这便是控制集中化的弊端。

Laughter is the shortest distance between two people.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值