- 又稱調(diào)停模式,定義一個(gè)中介角色來(lái)封裝一系列對(duì)象之間的交互,使原有對(duì)象之間的耦合松散,且可以獨(dú)立地改變它們之間的交互。
- 其實(shí)中介者模式是單一職責(zé)的體現(xiàn),對(duì)于類來(lái)說(shuō),它僅僅包含自己的行為,將對(duì)象之間的交互封裝到一個(gè)專門的類來(lái)管理。
- 將一對(duì)多的關(guān)系,轉(zhuǎn)換成雙向一對(duì)一的關(guān)系。
結(jié)構(gòu)
- 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事對(duì)象注冊(cè)與轉(zhuǎn)發(fā)同事對(duì)象信息的抽象方法。
- 具體中介者(ConcreteMediator)角色:實(shí)現(xiàn)中介者接口,定義一個(gè) List 來(lái)管理同事對(duì)象,協(xié)調(diào)各個(gè)同事角色之間的交互關(guān)系,因此它依賴于同事角色。
- 抽象同事類(Colleague)角色:定義同事類的接口,保存中介者對(duì)象,提供同事對(duì)象交互的抽象方法,實(shí)現(xiàn)所有相互影響的同事類的公共功能。
- 具體同事類(Concrete Colleague)角色:是抽象同事類的實(shí)現(xiàn)者,當(dāng)需要與其他同事對(duì)象交互時(shí),由中介者對(duì)象負(fù)責(zé)后續(xù)的交互。
實(shí)例
- 現(xiàn)在租房基本都是通過(guò)房屋中介,房主將房屋托管給房屋中介,而租房者從房屋中介獲取房屋信息。房屋中介充當(dāng)租房者與房屋所有者之間的中介者。
// 抽象同事類
// Person.java
public abstract class Person {
protected String name;
protected Mediator mediator;
public Person(String name, Mediator mediator) {
this.name = name;
this.mediator = mediator;
}
}
// 具體同事角色類
// HouseOwner.java
public class HouseOwner extends Person{
public HouseOwner(String name, Mediator mediator) {
super(name, mediator);
}
// 和中介溝通的方法
public void contact(String message){
mediator.contact(message,this);
}
// 獲取信息的方法
public void getMessage(String message){
System.out.println("房主:" + name + "收到的信息:" + message);
}
}
// 具體同事角色類
// Tenant.java
public class Tenant extends Person{
public Tenant(String name, Mediator mediator) {
super(name, mediator);
}
// 和中介溝通的方法
public void contact(String message){
mediator.contact(message,this);
}
// 獲取信息的方法
public void getMessage(String message){
System.out.println("租房者:" + name + "收到的信息:" + message);
}
}
// 抽象中介者類
// Mediator.java
public abstract class Mediator {
public abstract void contact(String message,Person person);
}
// 具體中介者角色類
// MediatorStructure.java
public class MediatorStructure extends Mediator{
// 聚合房主和租房者對(duì)象
private HouseOwner houseOwner;
private Tenant tenant;
public HouseOwner getHouseOwner() {
return houseOwner;
}
public void setHouseOwner(HouseOwner houseOwner) {
this.houseOwner = houseOwner;
}
public Tenant getTenant() {
return tenant;
}
public void setTenant(Tenant tenant) {
this.tenant = tenant;
}
@Override
public void contact(String message, Person person) {
if(person == houseOwner){
tenant.getMessage(message);
}else{
houseOwner.getMessage(message);
}
}
}
// Client.java
public class Client {
public static void main(String[] args) {
// 創(chuàng)建中介者對(duì)象
MediatorStructure mediator = new MediatorStructure();
// 創(chuàng)建兩個(gè)同事類對(duì)象
// 創(chuàng)建租房者對(duì)象
Tenant tenant = new Tenant("李四",mediator);
// 創(chuàng)建房主對(duì)象
HouseOwner houseOwner = new HouseOwner("張三",mediator);
// 中介者要知道具體的房主和租房者
mediator.setTenant(tenant);
mediator.setHouseOwner(houseOwner);
tenant.contact("今天天氣怎么樣");
houseOwner.contact("今天下暴雨了");
}
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。