中介者接口:
package mediator_mode; /** * 中介者接口 */ public interface Mediator { /** * 注册部门方法 */ public void register(String dname, Department department); /** * 调用部门方法 */ public void command(String dname); }
部门类接口:
package mediator_mode; /** * 同事类(部门类)接口 */ public interface Department { /** * 做本部门的事情 */ public void selfAction(); /** * 通过中介者调用具体部门的业务方法 */ public void outAction(); }
研发部类:
package mediator_mode; /** * 同事类(研发部类) */ public class Development implements Department{ /** * 持有中介者(总经理)的引用 */ private 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("financial"); } }
财务部类:
package mediator_mode; /** * 同事类(财务部类) */ public class Financial implements Department{ /** * 持有中介者(总经理)的引用 */ private Mediator mediator; /** * 构造器(传入中介者,并注册本部门) */ public Financial(Mediator mediator){ this.mediator = mediator; mediator.register("financial", this); } /** * 本部门干的事情 */ @Override public void selfAction() { System.out.println("数钱!给各部门提供资金支持!"); } /** * 通过中介者调用管理部的业务方法 */ @Override public void outAction() { System.out.println("汇报工作!..."); //mediator.command("management"); } }
市场部类:
package mediator_mode; /** * 同事类(市场部类) */ public class Market implements Department{ /** * 持有中介者(总经理)的引用 */ private Mediator mediator; /** * 构造器(传入中介者,并注册本部门) */ public Market(Mediator mediator){ this.mediator = mediator; mediator.register("mediator", this); } /** * 本部门干的事情 */ @Override public void selfAction() { System.out.println("跑去接项目!"); } /** * 通过中介者调用财务部的业务方法 */ @Override public void outAction() { System.out.println("汇报工作!项目承接的进度,需要资金支持!"); mediator.command("financial"); } }
总经理类:
package mediator_mode; import java.util.HashMap; import java.util.Map; /** * 总经理类(中介者实现类) */ public class ManagingDirector implements Mediator{ /** * 定义: 保存部门的容器 */ private Map<String, Department> map = new HashMap<String, Department>(); /** * 注册部门方法 * 传入部门名, 具体部门对象 */ @Override public void register(String dname, Department department) { map.put(dname, department); } /** * 根据传的参数, 调用具体部门的业务方法 * 可以传其它不同内容或参数, 根据此, 执行不同的动作 */ @Override public void command(String dname) { map.get(dname).selfAction(); } }
测试类:
package mediator_mode; public class Client { public static void main(String[] args) { //创建中介者类 Mediator mediator = new ManagingDirector(); //创建市场部(传入中介者并注册) Market market = new Market(mediator); //创建研发部(..) Development development = new Development(mediator); //创建财务部(..) Financial financial = new Financial(mediator); //市场部的业务方法 market.selfAction(); //市场部根据需求调用财务部的业务方法 ==> 通过中介者与财务部交互, 不直接与财务部交互 market.outAction(); } }
执行结果:
跑去接项目! 汇报工作!项目承接的进度,需要资金支持! 数钱!给各部门提供资金支持!
谢谢声明出处!
转自: http://www.cnblogs.com/gscq073240/articles/7106301.html