日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

一文徹底搞明白中介模式

來源: 責(zé)編: 時(shí)間:2024-05-16 09:08:48 212觀看
導(dǎo)讀本篇講解Java設(shè)計(jì)模式中的中介模式,分為定義、模式應(yīng)用前案例、結(jié)構(gòu)、模式應(yīng)用后案例、適用場(chǎng)景、模式可能存在的困惑和本質(zhì)探討7個(gè)部分。定義中介模式是用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互。中介者使各對(duì)象不需要

本篇講解Java設(shè)計(jì)模式中的中介模式,分為定義、模式應(yīng)用前案例、結(jié)構(gòu)、模式應(yīng)用后案例、適用場(chǎng)景、模式可能存在的困惑和本質(zhì)探討7個(gè)部分。nvA28資訊網(wǎng)——每日最新資訊28at.com

定義

中介模式是用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互。中介者使各對(duì)象不需要顯式地相互引用,從而使其耦合松散,而且可以獨(dú)立地改變它們之間的交互。nvA28資訊網(wǎng)——每日最新資訊28at.com

在新的分類方式中,中介模式模式被劃分至類之間的交互類別中,其簡(jiǎn)化的是一組類之間復(fù)雜的交互關(guān)系。nvA28資訊網(wǎng)——每日最新資訊28at.com

nvA28資訊網(wǎng)——每日最新資訊28at.com

模式應(yīng)用前案例

現(xiàn)實(shí)生活中房屋中介用于連接眾多買賣的雙方,其實(shí)就是中介模式在現(xiàn)實(shí)中的應(yīng)用,下面我們就拿這個(gè)案例來進(jìn)行說明。先來看一下未使用中介模式前的代碼實(shí)現(xiàn)。nvA28資訊網(wǎng)——每日最新資訊28at.com

public class Buyer {//買家private final String name;public Buyer(String name) {this.name = name;    }public void sendMessage(Seller seller, String message) {        System.out.println(this.name + " sends a message: " + message+ " to " + seller.getName());    }public String getName() {return this.name;    }}public class Seller {//賣家private final String name;public Seller(String name) {this.name = name;    }public void sendMessage(Buyer buyer, String message) {        System.out.println(this.name + " sends a message: " + message + " to " + buyer.getName());    }public String getName() {return this.name;    }}public class Client {//調(diào)用者代碼public static void main(String[] args) {// 創(chuàng)建兩個(gè)賣家對(duì)象        Seller seller1 = new Seller("Seller A");        Seller seller2 = new Seller("Seller B");//創(chuàng)建兩個(gè)買家對(duì)象        Buyer buyer1 = new Buyer("Buyer A");        Buyer buyer2 = new Buyer("Buyer B");// 直接讓賣家之間進(jìn)行通信        seller1.sendMessage(buyer1, "Hello, are you interested in collaborating?");        seller2.sendMessage(buyer2, "Yes, I am open to collaboration opportunities.");// 其他邏輯...    }}

從上述代碼來看,最主要的問題就是買家類和賣家類直接發(fā)生耦合,后續(xù)維護(hù)非常困難。nvA28資訊網(wǎng)——每日最新資訊28at.com

結(jié)構(gòu)

nvA28資訊網(wǎng)——每日最新資訊28at.com

中介模式的示例代碼實(shí)現(xiàn)如下。nvA28資訊網(wǎng)——每日最新資訊28at.com

public abstract class Colleague {protected  Mediator mediator;public Colleague(Mediator mediator){this.mediator = mediator;    }public abstract void send(String message);public abstract void receive(String message);}public class ConcreteColleague1 extends Colleague{public ConcreteColleague1(Mediator mediator) {super(mediator);    }@Overridepublic void send(String message) {        System.out.println("Colleague 1 sends: " + message);        mediator.send(message, this);    }@Overridepublic void receive(String message) {        System.out.println("Colleague 1 receives: " + message);    }}public class ConcreteColleague2 extends Colleague{public ConcreteColleague2(Mediator mediator) {super(mediator);    }@Overridepublic void send(String message) {        System.out.println("Colleague 2 sends: " + message);        mediator.send(message, this);    }@Overridepublic void receive(String message) {        System.out.println("Colleague 2 receives: " + message);    }}public abstract class Mediator {public abstract void send(String message, Colleague colleague);}public class ConcreteMediator extends Mediator{private ConcreteColleague1 colleague1;private ConcreteColleague2 colleague2;public void setColleague1(Colleague colleague1) {this.colleague1 = (ConcreteColleague1) colleague1;    }public void setColleague2(Colleague colleague2) {this.colleague2 = (ConcreteColleague2) colleague2;    }@Overridepublic void send(String message, Colleague colleague) {if (colleague == colleague1) {            colleague2.receive("Message from 1 to 2");        } else if (colleague == colleague2) {            colleague1.receive("Message from 2 to 1");        }    }}public class Client {public static void main(String[] args) {        ConcreteMediator mediator = new ConcreteMediator();        Colleague colleague1 = new ConcreteColleague1(mediator);        Colleague colleague2 = new ConcreteColleague2(mediator);        mediator.setColleague1(colleague1);        mediator.setColleague2(colleague2);        colleague1.send("Hello from A");        colleague2.send("Hello from B");    }}

從中介模式的結(jié)構(gòu)來看,原來Colleague的各個(gè)實(shí)現(xiàn)類之間需要直接交互,現(xiàn)在交互邏輯統(tǒng)一移到Mediator實(shí)現(xiàn)類中實(shí)現(xiàn),從而Colleague各個(gè)實(shí)現(xiàn)類之間可以實(shí)現(xiàn)松耦合。nvA28資訊網(wǎng)——每日最新資訊28at.com

模式應(yīng)用后案例

上面房屋中介的案例,在使用中介模式之后的代碼實(shí)現(xiàn)如下。nvA28資訊網(wǎng)——每日最新資訊28at.com

買家和賣家的家族類如下。nvA28資訊網(wǎng)——每日最新資訊28at.com

public interface IPerson {// 買家賣家接口String getName();void sendMessage(String message);void receiveMessage(String message);}public class Buyer implements IPerson{//具體買家類private final String name;private final IEstateMediator mediator;public Buyer(IEstateMediator mediator, String name){this.mediator=mediator;this.name=name;        mediator.registerPerson(this);    }@Overridepublic String getName(){return this.name;}@Overridepublic void sendMessage(String msg){//System.out.print(this.name +" sends a message: "+msg+"/n");this.mediator.sendMessage(msg,this);    }@Overridepublic void receiveMessage(String msg){        System.out.print(this.name +" receives a messages:"+msg+"/n");    }}public class Seller implements IPerson {// 具體賣家類private final String name;private final IEstateMediator mediator;public Seller(IEstateMediator mediator, String name){this.mediator=mediator;this.name=name;        mediator.registerPerson(this);    }@Overridepublic String getName(){return this.name;}@Overridepublic void sendMessage(String msg){//System.out.print(this.name +" sends a message: "+msg+"/n");this.mediator.sendMessage(msg,this);    }@Overridepublic void receiveMessage(String msg){        System.out.print(this.name +" receives a messages:"+msg+"/n");    }}

房屋中介的家族類如下。nvA28資訊網(wǎng)——每日最新資訊28at.com

public interface IEstateMediator {//中介者接口void registerPerson(IPerson person);void sendMessage(String message, IPerson person);}public class RealEstateMediator implements IEstateMediator {public List<IPerson> getSellers() {return this.sellers;    }public List<IPerson> getBuyers() {return this.buyers;    }private final List<IPerson> sellers = new ArrayList<>();private final List<IPerson> buyers = new ArrayList<>();@Overridepublic void registerPerson(IPerson person) {if(person instanceof Seller) {this.sellers.add(person);        }else if(person instanceof Buyer) {this.buyers.add(person);        }    }@Overridepublic void sendMessage(String message, IPerson person) {// 具體中介者類if(person instanceof Seller) {//說明是賣家發(fā)給買家for(IPerson buyer : this.buyers) {// 處理從賣家發(fā)出的消息,并轉(zhuǎn)發(fā)給其他買家                System.out.println(person.getName() + " sends message: " + message +" to " + buyer.getName());                buyer.receiveMessage(message);            }        }else if(person instanceof  Buyer) {//說明是買家發(fā)給賣家for(IPerson seller : this.sellers) {// 處理從買家發(fā)出的消息,并轉(zhuǎn)發(fā)給其他賣家                System.out.println(person.getName() + " sends message: " + message +" to " + seller.getName());                seller.receiveMessage(message);            }        }    }}

最后,調(diào)用方代碼實(shí)現(xiàn)如下。nvA28資訊網(wǎng)——每日最新資訊28at.com

public class Client {//調(diào)用方代碼public static void main(String[] args) {// 創(chuàng)建房地產(chǎn)中介對(duì)象        IEstateMediator mediator = new RealEstateMediator();// 創(chuàng)建兩個(gè)賣家對(duì)象,并注冊(cè)到房地產(chǎn)中介        IPerson seller1 = new Seller(mediator, "Seller A");        IPerson seller2 = new Seller(mediator, "Seller B");// 創(chuàng)建兩個(gè)買家對(duì)象,并注冊(cè)到房地產(chǎn)中介        IPerson buyer1 = new Buyer(mediator, "Buyer A");        IPerson buyer2 = new Buyer(mediator, "Buyer B");// 賣家發(fā)送消息給其他買家        seller1.sendMessage("Hello, I am a seller, are you interested in collaborating?");        seller2.sendMessage("Yes, I am a seller, I am open to collaboration opportunities.");// 買家發(fā)送消息給其他賣家        buyer1.sendMessage("Hello, I am a buyer, are you interested in collaborating?");        buyer2.sendMessage("Yes, I am a buyer, I am open to collaboration opportunities.");// 其他邏輯...    }}

從最終的調(diào)用方代碼來看,買家和賣家在發(fā)送消息時(shí),都不需要再關(guān)注具體的賣家或買家,兩者之間實(shí)現(xiàn)松耦合。買家和賣家之間關(guān)系的邏輯都放在房屋中介類中實(shí)現(xiàn)。nvA28資訊網(wǎng)——每日最新資訊28at.com

適用場(chǎng)景

中介者模式適用于以下場(chǎng)景:nvA28資訊網(wǎng)——每日最新資訊28at.com

1)一組對(duì)象以定義良好但是復(fù)雜的方式進(jìn)行通信。產(chǎn)生的相互依賴關(guān)系結(jié)構(gòu)混亂且難以理解nvA28資訊網(wǎng)——每日最新資訊28at.com

2)一個(gè)對(duì)象引用其它很多對(duì)象并且直接與這些對(duì)象通信,導(dǎo)致難以復(fù)用該對(duì)象。nvA28資訊網(wǎng)——每日最新資訊28at.com

3)需要通過一個(gè)中心化的調(diào)度器來協(xié)調(diào)多個(gè)對(duì)象之間的交互,并減少對(duì)象直接通信帶來的復(fù)雜性時(shí)nvA28資訊網(wǎng)——每日最新資訊28at.com

4)希望能夠降低系統(tǒng)內(nèi)各個(gè)組件之間依賴關(guān)系、提高系統(tǒng)靈活性和可維護(hù)性時(shí),可以使用中介者模式nvA28資訊網(wǎng)——每日最新資訊28at.com

5)一些具有交互邏輯但不應(yīng)該彼此直接知道對(duì)方存在的類nvA28資訊網(wǎng)——每日最新資訊28at.com

模式可能存在的困惑

困惑1:在中介者結(jié)構(gòu)中,中介Mediator家族類被定性為核心類。我們知道Mediator及實(shí)現(xiàn)類中只是負(fù)責(zé)管理關(guān)系,似乎核心業(yè)務(wù)邏輯還是在Colleage實(shí)現(xiàn)類中,如何解釋?nvA28資訊網(wǎng)——每日最新資訊28at.com

現(xiàn)實(shí)世界中很多場(chǎng)景下,實(shí)際上關(guān)系本身可能要比產(chǎn)生關(guān)系的具體系統(tǒng)要更有價(jià)值。比如,對(duì)于房屋中介,能盡快促成交易的前提是必須維護(hù)很多買家和賣家,并通過大數(shù)據(jù)分析,找到可能潛在會(huì)發(fā)生交易的買家和賣家之間的關(guān)系,這種關(guān)系的發(fā)現(xiàn)本身是很有價(jià)值的。因此,中介家族類歸屬于核心類別中。nvA28資訊網(wǎng)——每日最新資訊28at.com

本質(zhì)

在面向?qū)ο蟮暮芏鄨?chǎng)景應(yīng)用中,我們會(huì)盡量簡(jiǎn)化眾多交互者之間的關(guān)系,比如通過減少交互數(shù)量或者將交互確定性等手段。nvA28資訊網(wǎng)——每日最新資訊28at.com

然而,現(xiàn)實(shí)中也有一些場(chǎng)景,眾多交互者之間確實(shí)有交互的需求,并且這種交互具有不確定性。nvA28資訊網(wǎng)——每日最新資訊28at.com

中介者模式的本質(zhì)在于通過管理關(guān)系的復(fù)雜性獲得價(jià)值,從而使發(fā)生關(guān)系的眾多參與方解耦。nvA28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-88367-0.html一文徹底搞明白中介模式

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: Fo-Dicom開源庫(kù)是如何進(jìn)行模塊劃分的

下一篇: Elasticsearch 電商場(chǎng)景:明明有這個(gè)關(guān)鍵詞,但是搜不出來,怎么辦?

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
一本综合精品| 国产精品女人毛片| 国产精品99免费看 | 久久蜜臀精品av| 美女任你摸久久| 欧美日韩在线一区| 国产在线高清精品| 亚洲国产欧美在线| 亚洲在线国产日韩欧美| 久久久人成影片一区二区三区| 欧美大片免费观看| 国产欧美日韩另类视频免费观看| 欧美性感一类影片在线播放 | 欧美88av| 国产欧美日韩激情| 亚洲精品在线免费观看视频| 午夜宅男欧美| 欧美精品午夜| 国产亚洲精品久久久久动| 1024成人网色www| 午夜在线一区| 欧美日韩99| 亚洲国产精品福利| 久久国产日本精品| 国产欧美日韩在线观看| 这里只有精品视频| 欧美—级高清免费播放| 在线日韩av永久免费观看| 亚洲欧美春色| 国产精品qvod| 亚洲天堂男人| 欧美日韩成人| 日韩亚洲国产欧美| 欧美成人影音| 加勒比av一区二区| 久久精品男女| 韩日欧美一区| 久久久久久尹人网香蕉| 国产亚洲激情视频在线| 欧美一区二区三区四区在线观看 | 一区二区三区鲁丝不卡| 欧美精品一区二区三区在线播放| 亚洲国产精品一区在线观看不卡 | 狠狠干综合网| 久久精品夜色噜噜亚洲aⅴ| 国产色综合久久| 欧美自拍偷拍| 在线观看av不卡| 欧美精品一区二区三区在线播放| 亚洲人成在线观看一区二区| 欧美理论电影在线播放| 一区二区三区精品视频在线观看| 欧美日韩成人激情| 亚洲欧美精品在线观看| 韩国v欧美v日本v亚洲v| 女主播福利一区| 宅男噜噜噜66国产日韩在线观看| 国产精品久久久一区二区三区| 午夜久久黄色| 亚洲第一精品夜夜躁人人躁| 欧美日本一道本| 亚洲欧美日韩另类| 久久久噜噜噜久久| 亚洲欧美日本视频在线观看| 欧美视频专区一二在线观看| 亚洲一区三区在线观看| 亚洲欧洲一区二区在线观看| 久久亚洲午夜电影| 亚洲国产精品视频| 欧美波霸影院| 亚洲视频你懂的| 国精品一区二区| 欧美成人激情视频免费观看| 一区二区三区精品国产| 国产精品a久久久久久| 香蕉成人伊视频在线观看| 136国产福利精品导航| 欧美久色视频| 久久经典综合| 一本色道久久综合亚洲精品不 | 亚洲第一伊人| 欧美激情亚洲国产| 欧美在线网站| 亚洲视频在线二区| 国内精品久久久久久久果冻传媒| 欧美高清免费| 午夜亚洲性色视频| 亚洲免费av片| 在线看片欧美| 国产精品视频久久久| 欧美国产视频日韩| 亚洲欧美视频在线观看视频| 亚洲日本欧美在线| 狠狠做深爱婷婷久久综合一区| 欧美激情视频网站| 久久网站免费| 久久不射电影网| 亚洲欧美激情四射在线日 | 亚洲激情二区| 依依成人综合视频| 国内成人精品2018免费看| 国产精品永久免费在线| 国产精品jizz在线观看美国| 欧美伦理视频网站| 欧美大片18| 欧美国产日韩一区二区三区| 欧美成人一区二区三区在线观看| 久久综合九色综合欧美狠狠| 久久国产精品99国产| 久久国产精品一区二区三区四区| 亚洲一区二区欧美| 亚洲欧美成人精品| 亚洲欧洲av一区二区| 性刺激综合网| 久久精品中文字幕一区| 久久九九免费| 久久综合网络一区二区| 免费在线看成人av| 欧美劲爆第一页| 欧美三级黄美女| 国产麻豆9l精品三级站| 国产综合久久久久影院| 在线观看一区| 亚洲精品欧美| 先锋影音久久久| 久久亚洲国产成人| 欧美成人免费全部| 欧美精品在线观看播放| 欧美福利一区| 国产精品扒开腿做爽爽爽视频 | 久久中文字幕一区二区三区| 久久久人人人| 免费视频一区二区三区在线观看| 免费日本视频一区| 欧美日韩一区二区在线观看视频| 国产精品久久97| 在线观看视频日韩| 日韩视频二区| 久久九九国产| 国产精品成人一区二区三区夜夜夜 | 久久中文精品| 欧美无砖砖区免费| 在线精品视频一区二区三四| 日韩一级在线| 久久久久久久成人| 国产精品色婷婷| 亚洲精品久久久久久久久久久久久 | 一区二区欧美激情| 久久九九国产精品| 欧美午夜久久久| 日韩一级在线| 免费亚洲一区二区| 国产精品视频xxxx| 99视频精品在线| 欧美www视频在线观看| 精品成人一区| 久久激情视频免费观看| 国产精品国产三级国产普通话三级| 1024成人网色www| 久久精品女人的天堂av| 国产午夜精品久久| 亚洲欧美999| 欧美天天在线| 一区二区三区鲁丝不卡| 欧美日本网站| 日韩网站在线看片你懂的| 男女视频一区二区| 亚洲黄色大片| 免播放器亚洲一区| 亚洲国产婷婷香蕉久久久久久| 久久一区二区三区国产精品 | 国产日产欧美精品| 久久精品导航| 在线观看欧美日韩| 欧美成人自拍| 最近中文字幕日韩精品| 欧美成人一区二区三区| 99国产精品99久久久久久| 欧美日韩你懂的| 在线一区二区三区做爰视频网站| 欧美日韩亚洲一区二区三区在线 | 久久久91精品国产一区二区精品| 国产亚洲欧洲997久久综合| 久久精品国产综合精品| 亚洲国产一区二区三区a毛片| 女仆av观看一区| 日韩网站在线看片你懂的| 欧美日韩影院| 小处雏高清一区二区三区| 狠狠久久亚洲欧美| 牛牛国产精品| 亚洲在线网站| 狠狠网亚洲精品| 国产精品va在线播放| 午夜在线不卡| 亚洲国产91精品在线观看| 欧美日韩午夜| 久久激情五月丁香伊人| 亚洲精品在线观看免费| 国产美女一区二区| 欧美日韩国产美| 欧美一区二区三区电影在线观看| 在线电影国产精品| 欧美日韩国产精品成人|