1?中介者模式介紹
中介者模式是一種行為設(shè)計(jì)模式,指用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互。
中介者使各對(duì)象不需要顯示地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。在這個(gè)模式中,中介者負(fù)責(zé)協(xié)調(diào)各個(gè)對(duì)象間的通信,使其流程更加清晰簡(jiǎn)單。
???場(chǎng)景
中介者模式可以應(yīng)用于多個(gè)對(duì)象之間有復(fù)雜的交互關(guān)系的場(chǎng)景,例如一個(gè)大型軟件系統(tǒng)中的模塊之間的協(xié)作、多個(gè)部門(mén)之間的協(xié)作等。中介者模式可以簡(jiǎn)化對(duì)象之間的交互,使得對(duì)象之間的耦合度降低。具體來(lái)說(shuō),通過(guò)引入中介者對(duì)象,可以讓對(duì)象之間的通信集中在中介者對(duì)象上,從而避免了對(duì)象之間的直接依賴關(guān)系,提高了系統(tǒng)的可維護(hù)性和可擴(kuò)展性。
???優(yōu)點(diǎn)
- 減少對(duì)象之間的耦合度:通過(guò)使用中介者對(duì)象,可以將系統(tǒng)中多個(gè)對(duì)象之間的相互作用關(guān)系簡(jiǎn)化為中介者與對(duì)象之間的一種關(guān)系,從而降低系統(tǒng)的復(fù)雜性。
- 提高系統(tǒng)的可擴(kuò)展性:由于中介者模式將對(duì)象之間的相互作用關(guān)系抽象到中介者對(duì)象中,所以增加新的對(duì)象和中介者對(duì)象對(duì)原有系統(tǒng)的修改都是非常方便的。
- 降低系統(tǒng)的復(fù)雜度:中介者模式將多個(gè)對(duì)象之間的相互作用關(guān)系簡(jiǎn)化為中介者與對(duì)象之間的一種關(guān)系,使得系統(tǒng)的設(shè)計(jì)、實(shí)現(xiàn)變得更加簡(jiǎn)單。
???缺點(diǎn)
- 中介者對(duì)象會(huì)增加系統(tǒng)的復(fù)雜度:中介者對(duì)象需要處理多個(gè)對(duì)象之間的相互作用關(guān)系,所以它的設(shè)計(jì)和實(shí)現(xiàn)會(huì)比較復(fù)雜,這會(huì)增加系統(tǒng)的復(fù)雜度。
- 中介者對(duì)象可能會(huì)成為系統(tǒng)的瓶頸:由于中介者對(duì)象需要處理多個(gè)對(duì)象之間的相互作用關(guān)系,所以如果中介者對(duì)象的處理能力不足,可能會(huì)成為系統(tǒng)的瓶頸。
- 中介者模式會(huì)將原本分散的系統(tǒng)邏輯集中到一個(gè)地方:中介者模式將系統(tǒng)中多個(gè)對(duì)象之間的相互作用關(guān)系抽象到中介者對(duì)象中,因此原本分散的系統(tǒng)邏輯會(huì)集中到一個(gè)地方,這可能會(huì)使得系統(tǒng)的代碼結(jié)構(gòu)變得復(fù)雜。
2 中介者模式實(shí)現(xiàn)
以房屋中介為例:
???1.定義用戶
/**
* 用戶
*/
public class User {
/**
* 姓名
*/
private final String name;
/**
* 電話
*/
private final String phone;
/**
* 構(gòu)造姓名和電話
* @param name 姓名
* @param phone 電話
*/
public User(String name, String phone) {
this.name = name;
this.phone = phone;
}
/**
* 需要具體想找的地址和中介
* @param address 地址
* @param mediator 中介
* @return 用戶
*/
public User find(String address, Mediator mediator) {
// 中介根據(jù)地址找房
return mediator.find(address);
}
@Override
public String toString() {
return "(姓名:" + name + ",電話:" + phone + ")";
}
}
???2.定義中介
/**
* 中介
*/
public class Mediator {
/**
* 存儲(chǔ)在售房屋
*/
private final Map<String, User> userMap = new HashMap<>();
/**
* 登記房屋
* @param address 地址
* @param user 用戶
*/
public void register(String address, User user) {
userMap.put(address, user);
}
/**
* 查找房源
* @param address 地址
* @return 房東
*/
public User find(String address) {
return userMap.get(address);
}
}
???3.調(diào)用
public class Client {
public static void main(String[] args) {
// 房東
User landlord = new User("AA", "10011");
// 租客
User tenant = new User("BB", "10022");
// 中介
Mediator mediator = new Mediator();
// 中介登記房產(chǎn)
mediator.register("深圳市深圳灣一號(hào)", landlord);
// 租客委托中介查找符合要求房子的房東
User result = tenant.find("深圳市寶安區(qū)城中村", mediator);
if (result == null) {
System.out.println("沒(méi)有找到對(duì)應(yīng)的房源");
} else {
System.out.print("成功找到對(duì)應(yīng)房源:");
System.out.println(result);
}
// 再次查找
result = tenant.find("深圳市深圳灣一號(hào)", mediator);
if(result == null) {
System.out.println("沒(méi)有找到對(duì)應(yīng)的房源");
} else {
System.out.print("成功找到對(duì)應(yīng)房源:");
System.out.println(result);
}
}
}
控制臺(tái)輸出:
沒(méi)有找到對(duì)應(yīng)的房源
成功找到對(duì)應(yīng)房源:(姓名:AA,電話:10011)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-421419.html
這樣就實(shí)現(xiàn)了日常生活中的通過(guò)中介租房。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-421419.html
到了這里,關(guān)于【Java開(kāi)發(fā)】設(shè)計(jì)模式 17:中介者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!