e2

滴滴侠,fai抖

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

中介者接口:

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

 

posted on 2017-07-02 16:19  纯黑Se丶  阅读(101)  评论(0编辑  收藏  举报