無廢話設計模式(17)行為型模式–中介者模式
- 2020 年 8 月 7 日
- 筆記
- 92-設計模式 / 數據結構 / 算法, 設計模式
0-前言
中介者模式定義(Mediator):
用一個中介對象來封裝一系列的對象交互。
中介者對象不需要顯式地相互引用,從而使其耦合鬆散,而且可以獨立地改變他們之間的交互。
1-實現
1-1、簡單UML圖

1-2、代碼實現
//1、中介者抽象父類(客服父類)----------------------------------------- abstract class CustomerServer { abstract void Communicate(String message,Communicator communicator); } //1-1、具體中介者(客服MM) class CustomerServerMM extends CustomerServer { //A、設置客服服務的對象 private Customer customer; private Technician technician; public void setCustomer(Customer _customer) { this.customer = _customer; } public void setTechnician(Technician _technician) { this.technician = _technician; } //B、客服開始溝通 @Override public void Communicate(String message, Communicator communicator) { if (communicator ==customer) //顧客 { technician.GetMessage(message); } else { customer.GetMessage(message); } } } //2、服務對象抽象父類------------------------------------------------- abstract class Communicator { protected CustomerServer customerServer; //中介者 public Communicator(CustomerServer _customerServer) { this.customerServer = _customerServer; } } //2-1、服務對象具體類(顧客) class Customer extends Communicator { public Customer(CustomerServer customerServer) { super(customerServer); } //A、諮詢 public void Ask(String message) { customerServer.Communicate(message,this); } //B、獲得回復 public void GetMessage(String message) { System.out.println("顧客得到技術人員的回復:"+message); } } //2-2、服務對象具體類(維修技術人員) class Technician extends Communicator { public Technician(CustomerServer customerServer) { super(customerServer); } //A、回復 public void Anser(String message) { customerServer.Communicate(message,this); } //B、獲得問題 public void GetMessage(String message) { System.out.println("技術人員接收到顧客的問題:"+message); }
客戶端
CustomerServerMM csMM = new CustomerServerMM(); Customer customer = new Customer(csMM); Technician technician = new Technician(csMM); csMM.setCustomer(customer); csMM.setTechnician(technician); customer.Ask("為什麼我的電腦開不了機"); technician.Anser("電池沒插電源沒插,開啥機!");
運行結果

2-應用場景簡單總結
1、當一組對象以定義良好但是複雜的方式進行相互通訊時;
2、當一個對象需要引用很多其他對象並與這些對象通訊時;


