精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文徹底搞明白中介模式

開發 前端
在面向對象的很多場景應用中,我們會盡量簡化眾多交互者之間的關系,比如通過減少交互數量或者將交互確定性等手段。

本篇講解Java設計模式中的中介模式,分為定義、模式應用前案例、結構、模式應用后案例、適用場景、模式可能存在的困惑和本質探討7個部分。

定義

中介模式是用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用,從而使其耦合松散,而且可以獨立地改變它們之間的交互。

在新的分類方式中,中介模式模式被劃分至類之間的交互類別中,其簡化的是一組類之間復雜的交互關系。

模式應用前案例

現實生活中房屋中介用于連接眾多買賣的雙方,其實就是中介模式在現實中的應用,下面我們就拿這個案例來進行說明。先來看一下未使用中介模式前的代碼實現。

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 {//調用者代碼

public static void main(String[] args) {
// 創建兩個賣家對象
        Seller seller1 = new Seller("Seller A");
        Seller seller2 = new Seller("Seller B");

//創建兩個買家對象
        Buyer buyer1 = new Buyer("Buyer A");
        Buyer buyer2 = new Buyer("Buyer B");

// 直接讓賣家之間進行通信
        seller1.sendMessage(buyer1, "Hello, are you interested in collaborating?");
        seller2.sendMessage(buyer2, "Yes, I am open to collaboration opportunities.");

// 其他邏輯...
    }
}

從上述代碼來看,最主要的問題就是買家類和賣家類直接發生耦合,后續維護非常困難。

結構

中介模式的示例代碼實現如下。

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);
    }

@Override
public void send(String message) {
        System.out.println("Colleague 1 sends: " + message);
        mediator.send(message, this);
    }

@Override
public void receive(String message) {
        System.out.println("Colleague 1 receives: " + message);
    }
}

public class ConcreteColleague2 extends Colleague{
public ConcreteColleague2(Mediator mediator) {
super(mediator);
    }

@Override
public void send(String message) {
        System.out.println("Colleague 2 sends: " + message);
        mediator.send(message, this);
    }

@Override
public 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;
    }

@Override
public 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");
    }
}

從中介模式的結構來看,原來Colleague的各個實現類之間需要直接交互,現在交互邏輯統一移到Mediator實現類中實現,從而Colleague各個實現類之間可以實現松耦合。

模式應用后案例

上面房屋中介的案例,在使用中介模式之后的代碼實現如下。

買家和賣家的家族類如下。

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);
    }

@Override
public String getName(){
return this.name;}

@Override
public void sendMessage(String msg){
//System.out.print(this.name +" sends a message: "+msg+"\n");
this.mediator.sendMessage(msg,this);
    }

@Override
public 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);
    }

@Override
public String getName(){
return this.name;}

@Override
public void sendMessage(String msg){
//System.out.print(this.name +" sends a message: "+msg+"\n");
this.mediator.sendMessage(msg,this);
    }

@Override
public void receiveMessage(String msg){
        System.out.print(this.name +" receives a messages:"+msg+"\n");
    }

}

房屋中介的家族類如下。

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<>();

@Override
public void registerPerson(IPerson person) {

if(person instanceof Seller) {
this.sellers.add(person);
        }else if(person instanceof Buyer) {
this.buyers.add(person);
        }
    }

@Override
public void sendMessage(String message, IPerson person) {// 具體中介者類

if(person instanceof Seller) {//說明是賣家發給買家
for(IPerson buyer : this.buyers) {
// 處理從賣家發出的消息,并轉發給其他買家
                System.out.println(person.getName() + " sends message: " + message +" to " + buyer.getName());
                buyer.receiveMessage(message);
            }
        }else if(person instanceof  Buyer) {//說明是買家發給賣家
for(IPerson seller : this.sellers) {
// 處理從買家發出的消息,并轉發給其他賣家
                System.out.println(person.getName() + " sends message: " + message +" to " + seller.getName());
                seller.receiveMessage(message);
            }
        }

    }
}

最后,調用方代碼實現如下。

public class Client {//調用方代碼

public static void main(String[] args) {
// 創建房地產中介對象
        IEstateMediator mediator = new RealEstateMediator();

// 創建兩個賣家對象,并注冊到房地產中介
        IPerson seller1 = new Seller(mediator, "Seller A");
        IPerson seller2 = new Seller(mediator, "Seller B");

// 創建兩個買家對象,并注冊到房地產中介
        IPerson buyer1 = new Buyer(mediator, "Buyer A");
        IPerson buyer2 = new Buyer(mediator, "Buyer B");

// 賣家發送消息給其他買家
        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.");

// 買家發送消息給其他賣家
        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.");
// 其他邏輯...
    }
}

從最終的調用方代碼來看,買家和賣家在發送消息時,都不需要再關注具體的賣家或買家,兩者之間實現松耦合。買家和賣家之間關系的邏輯都放在房屋中介類中實現。

適用場景

中介者模式適用于以下場景:

1)一組對象以定義良好但是復雜的方式進行通信。產生的相互依賴關系結構混亂且難以理解

2)一個對象引用其它很多對象并且直接與這些對象通信,導致難以復用該對象。

3)需要通過一個中心化的調度器來協調多個對象之間的交互,并減少對象直接通信帶來的復雜性時

4)希望能夠降低系統內各個組件之間依賴關系、提高系統靈活性和可維護性時,可以使用中介者模式

5)一些具有交互邏輯但不應該彼此直接知道對方存在的類

模式可能存在的困惑

困惑1:在中介者結構中,中介Mediator家族類被定性為核心類。我們知道Mediator及實現類中只是負責管理關系,似乎核心業務邏輯還是在Colleage實現類中,如何解釋?

現實世界中很多場景下,實際上關系本身可能要比產生關系的具體系統要更有價值。比如,對于房屋中介,能盡快促成交易的前提是必須維護很多買家和賣家,并通過大數據分析,找到可能潛在會發生交易的買家和賣家之間的關系,這種關系的發現本身是很有價值的。因此,中介家族類歸屬于核心類別中。

本質

在面向對象的很多場景應用中,我們會盡量簡化眾多交互者之間的關系,比如通過減少交互數量或者將交互確定性等手段。

然而,現實中也有一些場景,眾多交互者之間確實有交互的需求,并且這種交互具有不確定性。

中介者模式的本質在于通過管理關系的復雜性獲得價值,從而使發生關系的眾多參與方解耦。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2024-05-10 08:43:04

外觀模式接口系統

2024-05-09 09:09:19

組合模式對象

2024-05-11 14:18:44

迭代器模式業務

2024-05-17 10:08:59

享元模式分類方式

2024-05-15 17:41:37

備忘錄模式多線程

2019-08-27 14:46:59

ElasticSearES數據庫

2020-07-10 08:03:35

DNS網絡ARPAne

2023-05-29 08:45:45

Java注解數據形式

2019-09-09 11:02:17

Nginx進程模型

2023-03-13 08:12:37

Golang編程路徑問題

2021-05-06 08:03:07

IPIP網絡模式calicok8s

2023-11-06 09:06:54

分布式一致性數據

2022-05-30 10:37:35

分布式事務反向補償

2021-07-08 10:08:03

DvaJS前端Dva

2020-12-07 06:19:50

監控前端用戶

2019-10-28 10:19:27

JVM 類加載器Java

2022-06-07 10:13:22

前端沙箱對象

2021-06-30 08:45:02

內存管理面試

2023-10-27 08:15:45

2020-03-18 14:00:47

MySQL分區數據庫
點贊
收藏

51CTO技術棧公眾號

91视频这里只有精品| 国产伦精品一区二区三毛| 天堂资源在线视频| 91丨精品丨国产| 尤物av一区二区| 国产高清不卡av| 日韩综合在线观看| 国产精品成人av| 欧美成人精精品一区二区频| 国产精品va无码一区二区| 国产乱子伦三级在线播放| 老鸭窝一区二区久久精品| 欧美大尺度在线观看| 99久久免费看精品国产一区 | 欧美大片在线看| 三上悠亚影音先锋| 久久精品免视看国产成人| 欧美性高潮床叫视频 | 欧美精品二区| 亚洲欧美视频在线| 成年女人免费视频| 亚洲国产91视频| 欧美视频免费在线观看| 久久人妻无码一区二区| 四虎影院在线域名免费观看| 青青青爽久久午夜综合久久午夜| 欧美激情在线有限公司| av在线播放中文字幕| 日韩欧美四区| 欧美日韩国产一二三| 免费在线激情视频| 男女羞羞视频在线观看| 综合av第一页| 日本一区二区免费看| 亚洲乱码在线观看| 捆绑调教一区二区三区| 欧美在线免费观看| 日韩激情一区二区三区| 欧美一区二区三区另类| 色诱女教师一区二区三区| 日本精品一二三区| 亚洲 欧美 综合 另类 中字| 亚洲黄色在线免费观看| 九九视频精品免费| 国产精品免费小视频| 国产精品免费精品一区| 91久久综合| 欧美精品福利在线| 国产一级片网址| 国产精品密蕾丝视频下载| 日韩精品在线免费观看视频| 少妇一级淫片免费放播放| 亚洲三级av| 欧美大片拔萝卜| 日韩精品xxx| 一区二区网站| 精品国产网站在线观看| 亚洲精品成人无码毛片| ccyy激情综合| 亚洲国产精品热久久| 国产极品一区二区| 天堂资源在线亚洲| 亚洲视频国产视频| 污污视频网站在线免费观看| 日韩精品一区二区三区免费观看 | 国产69视频在线观看| 欧美日韩中出| 337p日本欧洲亚洲大胆色噜噜| 亚洲 自拍 另类 欧美 丝袜| 亚洲一区二区三区在线免费| 日韩欧美国产三级| 国产大尺度视频| 欧美久久精品| 国产亚洲精品久久久久久777| 美国黄色特级片| 亚洲久久久久| 欧美福利视频在线| 国产成人自拍视频在线| 美女国产精品| 国产专区欧美专区| 亚洲精品一区二区口爆| 26uuuu精品一区二区| 日韩欧美99| 中文字幕在线观看网站| 亚洲国产成人av网| 草草草在线视频| 成人日韩视频| 亚洲精品国产品国语在线| 嘿嘿视频在线观看| 欧美国产另类| 日韩美女视频免费看| 亚洲一区精品在线观看| 风流少妇一区二区| 欧美一区二区三区精美影视| 黄色成人影院| 欧美午夜激情在线| 久久久精品高清| 日本国产精品| 色偷偷88888欧美精品久久久| 国产一级aa大片毛片| 美女诱惑一区| 国产精品大全| 北条麻妃在线| 亚洲福利视频导航| 欧美午夜aaaaaa免费视频| 综合中文字幕| 国产一区二区黑人欧美xxxx| 久久综合激情网| 全国精品久久少妇| 国产精品播放| caopo在线| 色综合天天综合在线视频| 污视频在线观看免费网站| 羞羞答答一区二区| 欧美肥老妇视频| 亚洲av综合一区| 99久久精品情趣| 影音先锋成人资源网站| 日韩av超清在线观看| 亚洲国产古装精品网站| 成人高潮免费视频| 奇米色一区二区三区四区| 国产亚洲欧美一区二区| 18视频在线观看网站| 欧美日韩一级视频| 日韩精品无码一区二区三区久久久| 亚洲精品a级片| 国产精品专区h在线观看| 爽爽视频在线观看| 亚洲一区二区三区四区五区黄 | 亚洲激情自拍图| 国产波霸爆乳一区二区| 蜜臀av一区二区| 欧美日韩无遮挡| 玖玖在线播放| 亚洲国产精品久久精品怡红院| 免费高清在线观看电视| 麻豆精品一区二区综合av| 欧美大香线蕉线伊人久久| caoprom在线| 精品久久久久久久久久久久久久久久久 | 影音先锋亚洲天堂| 成人免费毛片a| 日韩精品视频在线观看视频 | 国产天堂在线播放视频| 日韩视频在线你懂得| 性欧美疯狂猛交69hd| 奇米亚洲午夜久久精品| 亚洲欧洲一区二区福利| 国产成人亚洲一区二区三区| 国产一区二区激情| 中文字字幕在线中文乱码| 欧美国产日本韩| 亚洲色图 在线视频| 日韩av密桃| 国产自摸综合网| 精品黄色免费中文电影在线播放 | 性chinese极品按摩| 欧美午夜精品一区二区三区电影| 国产盗摄xxxx视频xxx69 | 久久成人av网站| 99热这里只有精品在线观看| 亚洲精品午夜久久久| 91成人在线观看喷潮蘑菇| 在线电影一区| 欧美精品一区二区三区在线四季| 成人小电影网站| 在线视频免费一区二区| 91成品人影院| 亚洲资源中文字幕| 精品国产人妻一区二区三区| 久久久精品五月天| 亚洲精品一区二区毛豆| 欧美国产中文高清| 26uuu亚洲国产精品| 波多野结衣一区二区| 欧美一个色资源| 久久精品女人毛片国产| 久久久久久久一区| 在线一区二区不卡| 精品二区视频| 青青草久久网络| 国产精品高清一区二区| 97高清免费视频| 91在线免费看| 欧美xfplay| 成人h动漫精品一区二区下载| 国产精品每日更新在线播放网址| www.日本久久| 国产日韩一区二区三区在线播放| 视频一区免费观看| 波多野结衣在线一区二区 | 国产精品一区二区精品| 欧美一级淫片播放口| 午夜视频在线观看免费视频| 精品久久久久久久久久久久久久久久久| 久久久久久三级| 亚洲电影影音先锋| 欧美日韩三区四区| av在线成人| 欧美一区二区三区四区在线| 麻豆最新免费在线视频| 亚洲另类欧美自拍| 国产高清在线免费| 色女孩综合影院| 久久久久久久久久综合| 欧美精彩视频一区二区三区| 美女伦理水蜜桃4| 美女精品自拍一二三四| 国产午夜福利100集发布| 99久久夜色精品国产亚洲96 | 日韩国产一区二区| 激情一区二区三区| 免费一区二区三区在线视频| 国产成人高潮免费观看精品| 男人天堂亚洲| 久久不射热爱视频精品| 97电影在线看视频| 亚洲美女性视频| 少妇精品高潮欲妇又嫩中文字幕 | 免费观看的毛片| 91麻豆精品国产91久久久更新时间 | 国产福利成人在线| 中文字幕在线免费观看视频| 欧美高清在线播放| 成人影院www在线观看| 在线观看国产成人av片| 蜜桃免费在线| 国产视频精品一区二区三区| 免费av网站观看| 精品少妇一区二区三区日产乱码 | 亚洲一区二三| 禁果av一区二区三区| 久久精品国产精品青草色艺| eeuss国产一区二区三区四区| 51国产成人精品午夜福中文下载| 狠狠久久综合| 国产噜噜噜噜噜久久久久久久久| 激情国产在线| 欧美一级电影在线| 麻豆国产在线| 欧美亚洲一级片| 女厕盗摄一区二区三区| 777精品视频| 精精国产xxxx视频在线播放| 91精品国产高清自在线| 国产亚洲成av人片在线观看| 午夜精品蜜臀一区二区三区免费| 福利在线导航136| 欧美激情精品在线| 色婷婷av在线| 欧美精品九九久久| 岛国av在线网站| 欧美中文在线观看国产| 国模冰冰炮一区二区| 日韩免费在线播放| 国产电影一区二区三区爱妃记| 国产精品黄色av| 久久人体av| 91在线高清视频| 亚洲3区在线| 国产欧美精品一区二区三区| 免费看久久久| 欧美一区二区综合| 久久国产综合| 国产精品三级一区二区| 在线日韩视频| 久草精品在线播放| 麻豆成人av在线| 香蕉视频1024| 97精品超碰一区二区三区| av小说在线观看| 中文字幕久久午夜不卡| 极品盗摄国产盗摄合集| 亚洲va韩国va欧美va精品| 国产午夜免费福利| 欧美日韩在线精品一区二区三区激情 | 国产福利小视频在线观看| 中文字幕综合一区| 伊人春色在线观看| 欧美一区二区三区免费视| 91精品国产66| 成人免费91在线看| 欧美日韩中文一区二区| 欧美少妇在线观看| 亚洲欧美日韩视频二区| 亚洲最大成人在线观看| 福利一区二区在线| 国产黄色录像视频| 亚洲午夜视频在线| 在线中文字幕网站| 精品欧美久久久| 97电影在线| 97在线视频免费观看| 国产精品蜜月aⅴ在线| 国产偷久久久精品专区| 日本一区二区三区视频| 91免费黄视频| 蜜桃在线一区二区三区| 欧美激情 亚洲| 国产精品三级视频| 日韩熟女精品一区二区三区| 欧美日韩在线免费视频| 五月天婷婷视频| 久久福利网址导航| 午夜av成人| 精品无人区一区二区三区竹菊| 99久久综合狠狠综合久久aⅴ| 免费看一级大黄情大片| 国产在线精品一区二区不卡了| 搡老熟女老女人一区二区| 国产精品夫妻自拍| 日韩免费av网站| 亚洲国产日韩欧美综合久久| 超碰在线caoporn| 国产精品久久久久久久久久小说 | 欧美日韩精品在线观看视频| 在线看不卡av| 欧美精品少妇| 午夜精品在线观看| 亚洲一区二区电影| 中文字幕在线中文字幕日亚韩一区| 国产日韩专区| 婷婷五月精品中文字幕| 一区二区三区视频在线观看| 97超碰国产在线| 色综久久综合桃花网| 色香欲www7777综合网| 久久99精品久久久水蜜桃| 国产综合婷婷| 日本高清免费观看| 综合婷婷亚洲小说| 91精品国产综合久| 在线播放国产一区二区三区| 欧美成人ⅴideosxxxxx| 久久精品magnetxturnbtih| 一区三区视频| 国产污在线观看| 亚洲成人午夜影院| 黄色一级大片在线免费看国产一| 久久中文字幕在线| 精品国产亚洲一区二区三区在线| 亚洲资源视频| 黄网站免费久久| 最新av电影网站| 欧美一区二区三区在线观看视频| 免费观看在线午夜影视| 成人a视频在线观看| 久久国产小视频| 三级黄色片免费看| 亚洲综合丝袜美腿| 欧美特黄一级视频| 91精品国产高清自在线| 蜜臀久久99精品久久一区二区| 欧美日韩亚洲第一| 久久精品人人做| 一级黄色a视频| 久久久999国产精品| 一区二区三区自拍视频| 成年人午夜免费视频| 99久久777色| 91porny九色| 丝袜一区二区三区| 日韩不卡在线视频| 黄色一级在线视频| 久久久99久久| 亚洲网站免费观看| 九色精品美女在线| 色婷婷久久久| 一级黄色录像在线观看| 亚洲乱码中文字幕| 国产综合无码一区二区色蜜蜜| 97视频在线观看网址| 久草成人资源| 国产一级片中文字幕| 亚洲国产精品久久不卡毛片| 青青青手机在线视频观看| 国产欧美精品va在线观看| 国内在线观看一区二区三区| 人妻在线日韩免费视频| 欧美精品久久99| 丁香影院在线| 日韩免费电影一区二区| 国产成人av一区二区三区在线 | 国产jjizz一区二区三区视频| 欧美精选一区二区| 国产乱码在线| 视频二区一区| 不卡的看片网站| 最近国语视频在线观看免费播放| 欧美精品性视频| 少妇精品久久久一区二区三区| 亚洲图片 自拍偷拍| 欧美日韩一区二区三区 | 免费看久久久| 在线黄色免费看| 欧美性猛交xxxx久久久| h视频在线免费观看| 欧美精品一区二区三区四区五区| 国产精品99久久久|