中介者模式適用於,完成一件事情,需要多方面協同合作,而多方面之間的耦合性較緊密有乙個場景
採購部門要採購ibm的電腦,它根據以下兩個要素來決定採購數量。
銷售部門要反饋銷售情況,暢銷就多採購,滯銷就不採購。
即使是暢銷產品,庫存都有1000臺了,每天才賣出去10臺,也就不需要再採購了!
銷售模組是企業的贏利核心,對其他兩個模組也有影響:
庫房有貨,才能銷售,空手套白狼是不行的。
在特殊情況下,比如乙個企業客戶要一次性購買100臺電腦,庫存只有80臺,這時需要
催促採購部門趕快採購!
從以上分析來看,這三個模組都有自己的行為,並且與其他模組之間的行為產生關聯,
類似於我們辦公室的同事,大家各幹各的活,但是彼此之間還是有交叉的,於是彼此之間就
產生緊耦合
採購管理
public class purchase else
}// 不再採購ibm電腦
public void refusebuyibm()
}
庫存管理public class stock
//庫存降低
public void decrease(int number)
//獲得庫存數量
public int getstocknumber()
//存貨壓力大了,就要通知採購人員不要採購,銷售人員要盡快銷售
public void clearstock()
}
銷售管理public class sale
system.out.println("銷售ibm電腦" + number + "臺");
stock.decrease(number);
}// 反饋銷售情況,0~100之間變化,0代表根本就沒人賣,100代表非常暢銷,出乙個賣乙個
public int getsalestatus()
//折價處理
public void offsale()
}
場景類public class client
}
執行結果------採購人員採購電腦--------
ibm電腦的銷售情況為:51
採購ibm電腦:50臺
庫存數量為:150
------銷售人員銷售電腦--------
ibm電腦的銷售情況為:51
採購ibm電腦:500臺
庫存數量為:650
ibm電腦的銷售情況為:51
採購ibm電腦:500臺
庫存數量為:1150
銷售ibm電腦1000臺
庫存數量為:150
------庫房管理人員清庫處理--------
清理存貨數量為:150
折價銷售ibm電腦150臺
不再採購ibm電腦
但是這個造就了很高的偶合度,這並不是我們所希望的,我們所希望得解耦合
耦合性越大,要想修改乙個就得修改一片,這不是物件導向設計所期望的
如果我們的管理部門多了怎麼辦,那顯然這樣是不合適的
所以我們需要乙個中介者,來作為這三個部門的交流核心
虛擬中介者類
public abstract class abstractmediator
//中介者最重要的方法叫做事件方法,處理多個物件之間的關係
public abstract void execute(string str, object... objects);
}
中介者類public class mediator extends abstractmediator else if (str.equals("sale.sell")) else if (str.equals("sale.offsell")) else if (str.equals("stock.clear"))
}//採購電腦
private void buycomputer(int number) else
}//銷售電腦
private void sellcomputer(int number)
super.stock.decrease(number);
}//折價銷售電腦
private void offsell()
//清倉處理
private void clearstock()
}
抽象同事類public abstract class abstractcolleague
}
public class newpurchase extends abstractcolleague
//採購ibm電腦
public void buyibmcomputer(int number)
//不再採購ibm電腦
public void refusebuyibm()
}
public class newstock extends abstractcolleague
//剛開始有100臺電腦
private static int computer_number = 100;
//庫存增加
public void increase(int number)
//庫存降低
public void decrease(int number)
//獲得庫存數量
public int getstocknumber()
//存貨壓力大了,就要通知採購人員不要採購,銷售人員要盡快銷售
public void clearstock()
}
public class newsale extends abstractcolleague
//銷售ibm電腦
public void sellibmcomputer(int number)
//反饋銷售情況,0~100變化,0代表根本就沒人買,100代表非常暢銷,出乙個賣乙個
public int getsalestatus()
//折價處理
public void offsale()
}
public class newclient 中介者模式的優點
中介者模式的優點就是減少類間的依賴,把原有的一對多的依賴變成了一對一的依賴,同事類只依賴中介者,減少了依賴,當然同時也降低了類間的耦合
中介者模式的缺點
中介者模式的缺點就是中介者會膨脹得很大,而且邏輯複雜,原本n個物件直接的相互依賴關係轉換為中介者和同事類的依賴關係,同事類越多,中介者的邏輯就越複雜
中介者模式的使用場景
中介者模式適用於多個物件之間緊密耦合的情況,緊密耦合的標準是:在類圖**現了蜘蛛網狀結構。在這種情況下一定要考慮使用中介者模式,這有利於把蜘蛛網梳理為星型結構,使原本複雜混亂的關係變得清晰簡單
中介者模式
1.中間 類 namespace intermediarypattern 成員物件需要知道是哪個中介者在通知它事情 public abstract class member 各成員間要傳送訊息 public abstract void send string msg 這個方法其實是具體實施發訊息的 ...
中介者模式
中介者模式就是在物件之間的關係很複雜時用,名如其人,就像租房的黑中介一樣,如果每個房東都拿著很多租房者的資訊很麻煩,每個租房者都要拿著很多房東的資訊也麻煩,所以需要乙個中介來拿著這些資訊,租房者只需要發出租房的請求,中介會給你介紹合適的房東,房東只需要提交房屋資料就等著中介的人帶著訪客看房拿錢就行了...
中介者模式
中介者模式 mediator pattern 1 抽象中介者 mediator 角色 抽象中介者角色定義統一的介面用於各同事角色之間的通訊。具體中介者 concrete mediator 角色 具體中介者角色通過協調各同事角色實現協作行為,因此它必須依賴於各個同事角色。同事 colleague 角色...