您的位置:首页 > 其它

中介者模式

2016-01-23 16:10 267 查看










/**
* 同事类的接口
*
* @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();

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

*/

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: