设计模式——中介者模式(Mediator)

代码:GitHub

中介者设计模式(公司部门打交道示例)

0. UML结构图

中介者模式UML结构图

1. 公司部门 Code

1.1 部门接口

public interface Department {

    /**
     * 做自己的事
     */
    void selfAction();

    /**
     * 向总经理发出请求
     */
    void outAction();

}

1.2 部门基类

public abstract class BaseDepartment implements Department {

    protected Mediator mediator;

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


    @Override
    public abstract void selfAction();

    @Override
    public abstract void outAction();

}

1.3 研发部

/**
 * 研发部
 *
 * @author ALion
 * @version 2019/2/17 17:06
 */
public class Development extends BaseDepartment {

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

    @Override
    public void selfAction() {
        System.out.println("Development.selfAction 研发产品");
    }

    @Override
    public void outAction() {
        System.out.println("Development.outAction 没钱了,需要支援");
        mediator.command("financial");
    }

}

1.4 市场部

public class Market extends BaseDepartment {

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

    @Override
    public void selfAction() {
        System.out.println("Market.selfAction 拓展市场项目");
    }

    @Override
    public void outAction() {
        System.out.println("Market.outAction 没钱了,需要支援");
        mediator.command("financial");
    }

}

1.5 财务部

public class Financial extends BaseDepartment {

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

    @Override
    public void selfAction() {
        System.out.println("Financial.selfAction 统计财务情况,发钱");
    }

    @Override
    public void outAction() {
        System.out.println("Financial.outAction");
    }

}

2. 公司总经理(中介)Code

2.1 中介接口

public interface Mediator {

    /**
     * 注册到中介
     * @param name 部门名称
     * @param department 部门类
     */
    void register(String name, Department department);

    /**
     * 让具体的部门执行本部门的职能
     * @param name 部门名称
     */
    void command(String name);

}

2.2 总经理

public class President implements Mediator {

    private Map<String, Department> map = new HashMap<>();

    @Override
    public void register(String name, Department department) {
        map.put(name, department);
    }

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

}

3. 公司部门打交道示例 Test

public class MediatorTest {

    public static void main(String[] args) {
        President president = new President();

        Department development = new Development(president);
        Department market = new Market(president);
        Department financial = new Financial(president);

        president.register("development", development);
        president.register("market", market);
        president.register("financial", financial);

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

        market.selfAction();
        market.outAction();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值