23种设计模式之中介者模式

这里写图片描述
中介者模式本质

  • 解耦多个部门对象之间的交互关系。每个对象都持有中介者对象的引用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互关系

android最常见的场景

  • MVC模式(其中的C),控制器就是一个中介者对象。M和V都和它打交道

总经理接口:总经理有两件事情:注册每个部门,向部门发送命令

//总经理接口
public interface Mediator {
    void register(String dname,Department d);
    void command(String dname);
}

部门接口:每个部门也只干两件事情,做自己本职工作和向总经理发送请求

public interface Department {
    void selfAction();//本职工作
    void outAction();//向总经理发送请求
}

科研部门

public class Development implements Department {
    Mediator mediator;

    public Development(Mediator mediator) {
        this.mediator = mediator;
        mediator.register("development",this);
    }

    @Override
    public void selfAction() {
        System.out.println("专心科研,开发好资源!");
    }

    @Override
    public void outAction() {

        System.out.println("汇报工作!没钱了,需要资金支持!");
        mediator.command("finacial");
    }
}

市场部部门

public class Market implements Department {
    Mediator mediator;//总经理,中间者

    public Market(Mediator mediator) {
        this.mediator = mediator;
        mediator.register("market",this);//注册当前
    }

    @Override
    public void selfAction() {

        System.out.println("市场部跑业务,拉妹子去了");
    }

    @Override
    public void outAction() {
        System.out.println("报告老板!市场部没钱了,请求发工资");
        mediator.command("finacial");//向财务部发命令
    }
}

财务部部门

public class Finacial implements Department {
    Mediator mediator;

    public Finacial(Mediator mediator) {
        this.mediator = mediator;
        mediator.register("finacial", this);
    }

    @Override
    public void selfAction() {

        System.out.println("我是财务部,马上发钱!");
    }

    @Override
    public void outAction() {
        System.out.println("汇报工作!没钱了,赶紧找人跑业务啊");
        mediator.command("market");
    }
}

总经理实现

public class President implements Mediator {
    private Map<String,Department> map=new HashMap<>();
    @Override
    public void register(String dname, Department d) {
        map.put(dname,d);
    }

    @Override
    public void command(String dname) {
       map.get(dname).selfAction();
    }
}

测试

       Mediator mediator = new President();//总经理
        Market market = new Market(mediator);//市场部
        Development development = new Development(mediator);//科研部
        Finacial finacial = new Finacial(mediator);//财务部

        development.selfAction();//
        development.outAction();


        finacial.outAction();
        market.outAction();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值