您好,登錄后才能下訂單哦!
本文源碼:GitHub·點這里 || GitEE·點這里
在公司的日常安排中,通常劃分多個部門,每個部門又會分為不同的小組,部門經理的一項核心工作就是協調部門小組之間的工作,例如開發小組,產品小組,小組的需求統一匯總到經理,經理統一安排和協調。
public class C01_InScene {
public static void main(String[] args) {
Manager manager = new Manager() ;
EmployeeA employeeA = new EmployeeA("張三",manager) ;
EmployeeB employeeB = new EmployeeB("李四",manager) ;
employeeA.sendMsg(employeeA.name,"需要產品文檔",employeeB);
}
}
/**
* 部門協調接口
*/
interface Department {
void coordinate (String userName,String msg,Employee employee) ;
}
/**
* 部門經理
*/
class Manager implements Department {
@Override
public void coordinate (String userName,String msg,Employee employee) {
System.out.println("經理接收【"+userName+"】的協調任務:" + msg);
System.out.println("經理轉發【"+userName+"】協調任務,@【"+employee.name+"】");
employee.getMsg(userName,msg);
}
}
/**
* 員工抽象類
*/
abstract class Employee {
public String name ;
private Department department ;
public Employee (String name,Department department){
this.name = name ;
this.department = department ;
}
public void getMsg (String userName,String msg){
System.out.println("【"+this.name+"】收到"+"【"+userName+"】協調任務:["+msg+"]");
}
public void sendMsg (String name,String msg,Employee employee){
System.out.println("【"+name+"】發起協調任務:"+ msg);
department.coordinate(name,msg,employee);
}
}
/**
* 具體員工
*/
class EmployeeA extends Employee {
public EmployeeA(String name, Department department) {
super(name, department);
}
}
class EmployeeB extends Employee {
public EmployeeB(String name, Department department) {
super(name, department);
}
}
執行結果
【張三】發起協調任務:需要產品文檔
經理接收【張三】的協調任務:需要產品文檔
經理轉發【張三】協調任務,@【李四】
【李四】收到【張三】協調任務:[需要產品文檔]
調停者模式是對象的行為模式。調停者模式包裝了一系列對象相互作用的方式,使得這些對象不必相互顯式引用,通過一個中介對象進行引用通知,從而對象之間解耦。當這些對象中的某些對象之間的相互作用發生改變時,不會立即影響到其他的對象間的相互作用。保證這些相互作用可以彼此獨立地變化。
定義出同事對象到調停者對象的接口,其中主要方法是一個或多個事件方法。
實現了抽象調停者所聲明的事件方法。具體調停者持有所有的具體同事類,并負責協調各具體同事對象的交互信息。
定義出調停者到同事對象的接口。同事對象只持有調停者而不知道具體的同事對象。
所有的具體同事類均從抽象同事類繼承而來,需要與其他同事通信的時候,就與持有的調停者通信,調停者會負責與其他的同事對象交互。
/**
* 抽象調停者類
*/
interface Mediator {
void notify (Colleague colleague);
}
/**
* 抽象同事類
*/
abstract class Colleague {
/* 持有調停者對象 */
private Mediator mediator;
public Colleague(Mediator mediator){
this.mediator = mediator;
}
public Mediator getMediator(){
return mediator;
}
}
/**
* 具體調停者類
*/
class ConcreteMediator implements Mediator{
private ConcreteColleagueA colleagueA ;
private ConcreteColleagueB colleagueB ;
public void setColleagueA(ConcreteColleagueA colleagueA) {
this.colleagueA = colleagueA;
}
public void setColleagueB(ConcreteColleagueB colleagueB) {
this.colleagueB = colleagueB;
}
@Override
public void notify(Colleague colleague) {
System.out.println("協調通知消息");
}
}
/**
* 具體同事類
*/
class ConcreteColleagueA extends Colleague{
public ConcreteColleagueA(Mediator mediator) {
super(mediator);
}
public void operate(){
getMediator().notify(this);
}
}
class ConcreteColleagueB extends Colleague{
public ConcreteColleagueB(Mediator mediator) {
super(mediator);
}
public void operation(){
getMediator().notify(this);
}
}
調停者模式通過把多個同事對象之間的交互封裝到調停者對象里面,從而使得同事對象之間松散耦合。
多個同事對象的交互,被封裝在調停者對象里面集中管理,使得這些交互行為發生變化的時候,只需要修改調停者對象就可以了。
沒有使用調停者模式的時候,同事對象之間的關系通常是多對多的,引入調停者對象以后,調停者對象和同事對象的關系通常變成雙向的一對多。
調停者模式的一個潛在缺點是,過度集中化,當同事對象很多,交互非常、復雜時,會導致調停者對象變得十分復雜,而且難于管理和維護。
GitHub·地址
https://github.com/cicadasmile/model-arithmetic-parent
GitEE·地址
https://gitee.com/cicadasmile/model-arithmetic-parent
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。