Java设计模式-中介者模式
一起來看看啦,為進階做做準備啦,并竟沉下去才能浮上來。😁
會了就當復習丫,不會來一起來看看吧。
很喜歡一句話:“八小時內謀生活,八小時外謀發展”。
如果你也喜歡,讓我們一起堅持吧!!
共勉😁
作者:用心笑*
喜歡云
一、前言
1)引入:
一般來說,同事類之間的關系是比較復雜的,多個同事類之間互相關聯時,他們之間的關系會呈現為復雜的網狀結構,這是一種過度耦合的架構,即不利于類的復用,也不穩定。例如在下左圖中,有六個同事類對象,假如對象1發生變化,那么將會有4個對象受到影響。如果對象2發生變化,那么將會有5個對象受到影響。也就是說,同事類之間直接關聯的設計是不好的。
如果引入中介者模式,那么同事類之間的關系將變為星型結構,從下右圖中可以看到,任何一個類的變動,只會影響的類本身,以及中介者,這樣就減小了系統的耦合。一個好的設計,必定不會把所有的對象關系處理邏輯封裝在本類中,而是使用一個專門的類來管理那些不屬于自己的行為。
2)概述:
中介者模式(Mediator Pattern)是用來降低多個對象和類之間的通信復雜性。這種模式提供了一個中介類,該類通常處理不同類之間的通信,并支持松耦合,使代碼易于維護。中介者模式又叫調停模式,它是迪米特法則的典型應用。中介者模式屬于行為型模式。
3)角色結構:
4)注意事項:
不應當在職責混亂的時候使用。
二、案例代碼
2.1、案例:
租房:
現在租房基本都是通過房屋中介,房主將房屋托管給房屋中介,而租房者從房屋中介獲取房屋信息。房屋中介充當租房者與房屋所有者之間的中介者。
類圖:
2.2、實現:
//抽象中介者 public abstract class Mediator {//申明一個聯絡方法public abstract void constact(String message,Person person); }//抽象同事類 public abstract class Person {protected String name;protected Mediator mediator;public Person(String name,Mediator mediator){this.name = name;this.mediator = mediator;} }//具體同事類 房屋擁有者 public class HouseOwner extends Person {public HouseOwner(String name, Mediator mediator) {super(name, mediator);}//與中介者聯系public void constact(String message){mediator.constact(message, this);}//獲取信息public void getMessage(String message){System.out.println("房主" + name +"獲取到的信息:" + message);} }//具體同事類 承租人 public class Tenant extends Person {public Tenant(String name, Mediator mediator) {super(name, mediator);}//與中介者聯系public void constact(String message){mediator.constact(message, this);}//獲取信息public void getMessage(String message){System.out.println("租房者" + name +"獲取到的信息:" + message);} }//中介機構 public class MediatorStructure extends Mediator {//首先中介結構必須知道所有房主和租房者的信息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;}public void constact(String message, Person person) {if (person == houseOwner) { //如果是房主,則租房者獲得信息tenant.getMessage(message);} else { //反正則是房主獲得信息houseOwner.getMessage(message);}} }//測試類 public class Client {public static void main(String[] args) {//一個房主、一個租房者、一個中介機構MediatorStructure mediator = new MediatorStructure();//房主和租房者只需要知道中介機構即可HouseOwner houseOwner = new HouseOwner("張三", mediator);Tenant tenant = new Tenant("李四", mediator);//中介結構要知道房主和租房者mediator.setHouseOwner(houseOwner);mediator.setTenant(tenant);tenant.constact("需要租三室的房子");houseOwner.constact("我這有三室的房子,你需要租嗎?");} }三、總結
優點:
類和類之間各做各的事情,符合迪米特法則。
松散耦合
中介者模式通過把多個同事對象之間的交互封裝到中介者對象里面,從而使得同事對象之間松散耦合,基本上可以做到互補依賴。這樣一來,同事對象就可以獨立地變化和復用,而不再像以前那樣“牽一處而動全身”了。
一對多關聯轉變為一對一的關聯
沒有使用中介者模式的時候,同事對象之間的關系通常是一對多的,引入中介者對象以后,中介者對象和同事對象的關系通常變成雙向的一對一,這會讓對象的關系更容易理解和實現。
缺點:
當同事類太多時,中介者的職責將很大,它會變得復雜而龐大,以至于系統難以維護。
使用場景:
- 當對象之間存在復雜的網狀結構關系而導致依賴關系混亂且難以復用時。
- 當想創建一個運行于多個類之間的對象,又不想生成新的子類時。
四、自言自語
我也不知道文章寫出來是有用還是無用,只是想做一個分享。希望大家能夠喜歡并且在這里能有收獲。
當然不可否認,我也想獲得那種別人認可的那種快樂,并且能人我繼續維之堅持。
你好啊,要天天開心哦。下篇文章再見。
此系列還在持續更新中… 我一定還會回來的。😁
總結
以上是生活随笔為你收集整理的Java设计模式-中介者模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速 Get 面试题中:线程池七个参数和
- 下一篇: 你对Java网络编程了解的如何?Java