一、核心作用:
- 如果一個系統中對象那個之間的聯繫呈現爲網狀結構,對象存在大量多對多的關係,將導致關係及其複雜,這些對象稱爲“同事對象”
- 我們可以引入一箇中介者對象,使各同事對象只跟中介者對象打交道,將複雜的網絡結構化解爲星狀結構,解耦多個同事對象之間的交互關係
- 每個對象都持有中介者對象的引用,只跟中介者對象打交道,通過中介者對象統一管理這些交互關係
二、常見應用場景:
- MVC模式(C爲中介者對象,MV與他打交道)
- 圖形界面開發GUI,多個組件交互,引入中介者
三、中介者模式的實現:
- 抽象中介者(mediator):定義一個接口用於和對象通信
- 具體中介者(concreteMediator):協調各同時對象實現寫作,維護各個同事
- 抽象同事角色(colleague):規定了同事的基本類型
- 具體同事角色(concreteColleague):每個同事都知道中介者
四、代碼示例:
一、抽象中介者類:
package com.hezeu.mediator;
/**
* @Classname Mediator
* @Description 抽象中介者
* @Date 2020/2/26 上午 12:31
* @Created by 朱進博 [email protected]
*/
public interface Mediator {
void register(String dname,Department department);
void command(String dname);
}
二、具體中介者類:
package com.hezeu.mediator;
import java.util.HashMap;
import java.util.Map;
/**
* @Classname President
* @Description 具體中介者類
* @Date 2020/2/26 上午 12:47
* @Created by 朱進博 [email protected]
*/
public class President implements Mediator {
private Map<String,Department> map = new HashMap<>();
@Override
public void register(String dname, Department department) {
map.put(dname,department);
}
@Override
public void command(String dname) {
map.get(dname).selfAction();
}
}
三、抽象同事類:
package com.hezeu.mediator;
/**
* @Classname Department
* @Description 同事類接口
* @Date 2020/2/26 上午 12:33
* @Created by 朱進博 [email protected]
*/
public interface Department {
void selfAction(); //本不笨要做的事情
void outAction(); //向總經理髮出的申請
}
四、具體同事類
package com.hezeu.iterator;
import java.util.ArrayList;
import java.util.List;
/**
* @Classname ConcreteAggregate
* @Description TODO
* @Date 2020/2/25 下午 07:34
* @Created by 朱進博 [email protected]
*/
public class ConcreteAggregate implements Aggregate{
private List<Object> list = new ArrayList<>();
public void addObject(Object obj) {
this.list.add(obj);
}
public void removeObject(Object obj) {
this.list.remove(obj);
}
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
public MyInteger createIterator() {
return new ConcreteIterator(list);
}
}
五、中介者模式的優缺點:
優點:
- 通過中介者,讓對象彼此解耦,增加對象的複用性
- 通過將控制邏輯集中,可以簡化系統維護
- 通過中介者使一對多變成了一對一,便於理解
缺點:
- 如果設計不好,引用中介者可能會使程序變複雜
- 中介者承擔過多責任,維護不好事情更加麻煩