java設計模式-中介者模式

什麼是中介者模式:
如果一個對象系統中,各個子對象都要相互交互,形成了網狀結構,這時候,我們可以定義一個對象,各個子系統的處理和交互都交給它,由它統一調度。

這裏寫圖片描述

開發中使用的中介者模式:
1.mvc架構中的c,需要同時和m和v打交道
2.java.lang.reflect.Method#invoke()

中介者模式例子:
這裏的實現的場景是,軟件產品的研發流程。所以我們定義下各個部門職能

package com.javademo.pattern.mediator;

/**
 * 部門接口
 * 
 * @author liuxg
 * @date 2016年5月27日 下午9:22:21
 */
public interface Department {

    void needToDo();

}

class Research implements Department {

    @Override
    public void needToDo() {

        System.out.println("研發產品");

    }

}
class Sale implements Department {

    @Override
    public void needToDo() {

        System.out.println("賣產品");

    }

}
class Business implements Department {

    @Override
    public void needToDo() {

        System.out.println("定需求");

    }

}

中介者沒有出現之前,各個部門的交流,都需要面對面的交流,我們來設計一下中介者,所有的交流和調度都由他來完成

public interface Mediator {

    void register(String dname ,Department department);
    void command(String dename);

}


/**
 * 領導充當中介者角色
 * @author liuxg
 * @date 2016年5月27日 下午9:19:29
 */
class Leader 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 dename) {
        if (map.get(dename) != null) {
            map.get(dename).needToDo();
        }

    }

}

客戶端產品的研發流程直接就由中介者來調度了

public class Client {

    public static void main(String[] args) {

        Mediator mediator = new Leader();

        Department research = new Research();
        Department business = new Business();
        Department sale = new Sale();

        mediator.register("research", research); //將調度權交給領導
        mediator.register("business", business);
        mediator.register("sale", sale);

        mediator.command("business");//領導進行調度
        mediator.command("research");
        mediator.command("sale");

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章