中介者模式

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

/**
 * 同事类的接口
 *  
 * @author zhangjianbin
 *
 */
public interface Department {

    /**
     * 做本部门的事
     */
    void selfAction();

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

}
/**
 * 研发部门
 * @author zhangjianbin
 *
 */
public class Development implements Department {

    /**
     * 持有中介者的引用
     *   中介者:总经理
     */
    private Mediator mediator;

    public Development(Mediator mediator) {
        super();
        this.mediator = mediator;

        /**
         * 作用:中介者(总经理)与研发部门相互持有各自的引用,互相可以找的到
         */
        this.mediator.regiser("development", this);
    }

    @Override
    public void selfAction() {
        System.err.println("专心开发项目");
    }

    @Override
    public void outAction() {
        System.err.println("向总经理汇报工作,没钱了,需要资金支持");
    }


}
/**
 * 财报部门
 * @author zhangjianbin
 *
 */
public class Finacial implements Department {

    /**
     * 持有中介者的引用
     *   中介者:总经理
     */
    private Mediator mediator;

    public Finacial(Mediator mediator) {
        super();
        this.mediator = mediator;

        /**
         * 作用:中介者(总经理)与财报部门相互持有各自的引用,互相可以找的到
         */
        this.mediator.regiser("Finacial", this);
    }

    @Override
    public void selfAction() {
        System.err.println("数钱");
    }

    @Override
    public void outAction() {
        System.err.println("向总经理汇报工作,钱太多了,怎能么花");
    }


}
/**
 * 市场部门
 * 
 * @author zhangjianbin
 * 
 */
public class Martket implements Department {

    /**
     * 记录市场部要和哪个部门进行沟能,告许经理
     */
    private String flg;
    /**
     * 持有中介者的引用 中介者:总经理
     */
    private Mediator mediator;

    public Martket(Mediator mediator) {
        super();
        this.mediator = mediator;

        /**
         * 作用:中介者(总经理)与市场部门相互持有各自的引用,互相可以找的到
         */
        this.mediator.regiser("Martket", this);
    }

    @Override
    public void selfAction() {
        System.err.println("承接项目");
    }

    @Override
    public void outAction() {
        System.err.println("向总经理汇报工作,承接项目的进度");

        /**
         * 对经理说:需要财务部门的支持,这时传入财务部门的标识即可, 然后经理去和财务部门进行沟通
         */
        mediator.command(flg);
    }


    /**
     * 设置部门的标识
     * @param flg
     */
    public void setFlg(String flg) {
        this.flg = flg;
    }

}
/**
 * 中介者
 *     接口
 * @author zhangjianbin
 *
 */
public interface Mediator {

    void regiser(String name,Department d);//同事与总经理相互引用

    void command(String name); //中介(总经理)下发的命令
}

/**
 * 中介者的实现类 总经理
 * 
 * @author zhangjianbin
 * 
 */
public class Persident implements Mediator {

    /**
     * 存放相关的同事类
     */
    private Map<String, Department> map = new HashMap<String, Department>();

    @Override
    public void regiser(String name, Department d) {

        map.put(name, d);
    }

    @Override
    public void command(String name) {
        /**
         * 根据不同的字符处理调用不同的命令 或者 根据不同的内容,总经理执行调用不同的方法
         *      例:
         *      需要找财务部,则传财务部门的标识就可以了,总经理就和财务部门沟通
         */
        map.get(name).selfAction();     
    }

}
    /**
     * 市场部对象和财务部对象之间实现交互
     *   通过经理去沟通
     * @param args
     */
    public static void main(String[] args) {
        /**
         * 中介者:经理
         */
        Mediator m = new Persident();

        Martket mk = new Martket(m);
        Development dv = new Development(m);
        Finacial fn = new Finacial(m);

        /**
         * 查看市场部的工作内容
         */
        mk.selfAction();

        /**
         * 市场部要和财务部门沟能,要钱
         */
        mk.setFlg("Finacial");

        /**
         * 向经理汇报情况,经理和财务去沟通
         */
        mk.outAction();

        /**
         结果:
            承接项目
            向总经理汇报工作,承接项目的进度
            数钱

         */

    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值