精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品一区二区在线观看不卡| 2024最新电影免费在线观看| 久久久久久黄| 色偷偷偷亚洲综合网另类| 在线视频一二区| 丰满的护士2在线观看高清| 人妻一区二区三区四区| 99热国内精品永久免费观看| 精品久久人人做人人爽| 无码少妇一区二区三区芒果| 成人av福利| 久久精品人人做人人综合| 97se国产在线视频| 波多野结衣黄色网址| 欧美午夜视频| 国产小视频91| 亚洲精品国产成人av在线| 国精品产品一区| 亚洲成av人综合在线观看| 一区二区视频在线观看| 日韩欧美亚洲系列| 国产999精品久久| 国产日韩欧美夫妻视频在线观看 | 国产精品久久久久婷婷二区次| http;//www.99re视频| 中文天堂在线资源| 国产日韩视频| 色综合色综合久久综合频道88| 欧美人与性囗牲恔配| 国产乱人伦丫前精品视频| 在线电影欧美成精品| 国产亚洲天堂网| av午夜在线观看| 亚洲欧美一区二区三区久本道91| 日韩黄色影视| 你懂的视频在线观看| 成人av在线看| 国产精品久久国产三级国电话系列| 一区二区视频免费| 老司机精品久久| 欧美在线观看视频| 女人十八岁毛片| 亚洲精品综合| 国模私拍视频一区| 久久久久久久久97| 欧美精品国产一区| 99久久精品免费观看| 精品国产区一区| 在线观看岛国av| 日韩欧美激情| 欧美日韩国产精选| 日本黄大片一区二区三区| 三上悠亚激情av一区二区三区| 欧美日韩亚洲一区二区| av7777777| 亚洲欧洲自拍| 一本色道久久综合狠狠躁的推荐| 蜜桃传媒一区二区三区| 超碰资源在线| 一本大道久久a久久精二百| 黄色国产精品视频| 日日av拍夜夜添久久免费| 一本到高清视频免费精品| 免费黄色福利视频| 在线观看欧美日韩电影| 一本大道av伊人久久综合| 欧美成人黑人猛交| 九九热这里有精品| 欧美一区2区视频在线观看| 亚洲av无一区二区三区久久| 在这里有精品| 日韩av在线网页| 一区二区三区伦理片| 日韩在线精品| 欧美丰满少妇xxxx| 成年人免费看毛片| 视频一区二区中文字幕| 国产日韩av在线播放| 精品人妻无码一区二区色欲产成人| 国产成人久久精品77777最新版本| av一区二区在线看| 你懂的视频在线免费| 国产精品少妇自拍| 老子影院午夜伦不卡大全| 亚洲精品88| 欧美二区乱c少妇| www.美色吧.com| 国产成人三级| 欧美成人一区在线| 黄色一级视频免费看| 成人在线观看免费| 成人精品高清在线| 日韩在线第一区| 手机在线免费观看av| 精品久久久久久| 57pao国产成永久免费视频| 2021年精品国产福利在线| 亚洲美女精品久久| 国产精品嫩草影院俄罗斯| 亚洲激情一区| 国产欧洲精品视频| 亚洲欧洲成人在线| 亚洲天堂免费在线观看视频| 精品国产免费av| 亚洲免费资源| 亚洲欧美日韩精品久久奇米色影视| 欧美日韩黄色网| 羞羞视频在线观看欧美| 18成人免费观看网站下载| 免费人成在线观看网站| 亚洲人成7777| 999在线免费视频| 久久久亚洲欧洲日产| 久久亚洲精品一区二区| 伊人中文字幕在线观看 | 深田咏美中文字幕| 久久视频精品| 日韩免费不卡av| www.色亚洲| 亚洲欧洲日产国码二区| 午夜精品久久久内射近拍高清| 久久丁香四色| 中文字幕成人精品久久不卡| 中文字幕激情小说| 成人中文字幕在线| 日本精品免费视频| 日本综合视频| 亚洲女人被黑人巨大进入| 国产大片aaa| 国产精品亚洲人在线观看| 亚洲激情一区二区| 色8久久影院午夜场| 亚洲国产精品系列| 精品亚洲永久免费| 国产精品亚洲а∨天堂免在线| 四虎永久国产精品| 右手影院亚洲欧美| av在线不卡免费观看| 性色av一区二区三区红粉影视| 国产日韩欧美视频在线观看| 中文字幕中文在线不卡住| 91蝌蚪视频在线观看| 亚洲人成网www| 91精品国产91久久久久福利| 免费观看国产视频| 亚洲一区二区三区四区在线| 国产在线视频三区| 欧美一区二区三区另类 | 欧美视频在线播放一区| 成人av综合网| 国内偷自视频区视频综合| 丰满人妻一区二区三区无码av | 伊人久久久久久久久久久久| 久久亚洲综合色| 激情六月丁香婷婷| 精品国产一区二区三区噜噜噜| 国产精品jizz在线观看麻豆| 国产高清在线| 欧美系列日韩一区| 亚洲综合图片一区| 国产又黄又大久久| 丁香色欲久久久久久综合网| 91深夜福利视频| 丰满人妻一区二区三区免费视频| 亚洲激情图片qvod| 九九精品在线观看| 国产精品成人久久久| 国产精品视频yy9299一区| 免费在线观看污网站| 欧美+日本+国产+在线a∨观看| 99re国产视频| 韩日毛片在线观看| 亚洲精选中文字幕| 懂色av蜜臀av粉嫩av喷吹 | 美女av免费看| 黄色日韩网站视频| 男女私大尺度视频| 国产探花在线精品| 热久久免费视频| 国产在线欧美日韩| 亚洲a∨精品一区二区三区导航| 日韩中文字幕在线视频| 国产 日韩 欧美 综合| 欧美午夜性色大片在线观看| 亚洲天堂岛国片| 福利电影一区二区| 国产精品无码一本二本三本色| 日韩dvd碟片| 国产精品久久九九| 国产成人精选| 国外视频精品毛片| 免费在线观看黄| 精品福利一二区| 一级一级黄色片| 亚洲国产美国国产综合一区二区| 日本性高潮视频| 国产91精品欧美| 亚洲熟妇av一区二区三区| 欧美1区3d| 日韩欧美第二区在线观看| 97成人在线| 国产一区二区丝袜高跟鞋图片| 91视频欧美| 久久综合五月天| 韩国中文字幕2020精品| 精品国产伦理网| 91国内精品久久久| 欧美日韩免费在线观看| 欧美成人777| 欧美韩国日本不卡| 亚洲av无码一区二区三区网址| 国产自产2019最新不卡| av动漫免费看| 亚洲理论在线| 国产成人亚洲综合无码| 日韩精品免费| 欧美日韩在线播放一区二区| 97色成人综合网站| 亚洲影院在线看| 日韩欧国产精品一区综合无码| 日本一区二区不卡| 色一区二区三区| 久久久久久午夜| 天天色天天射天天综合网| www.美女亚洲精品| 国产露出视频在线观看| 日韩av中文在线| 日本高清视频在线| 日韩欧美三级在线| 国产美女主播在线观看| 欧美日韩午夜影院| 国产a级片免费观看| 在线观看av的网站| 日韩大陆毛片av| 艳母动漫在线看| 亚洲国产福利在线| 亚洲黄色精品视频| 欧美一级欧美三级在线观看| 国产精品欧美激情在线| 56国语精品自产拍在线观看| 伊人久久一区二区| 欧美三级日本三级少妇99| 人人妻人人爽人人澡人人精品| 日韩欧美在线视频| 亚洲 日本 欧美 中文幕| 精品国产1区2区| 精品人妻无码一区二区性色| 精品电影在线观看| 日日夜夜狠狠操| 欧美亚日韩国产aⅴ精品中极品| 波多野结衣二区三区| 欧美在线|欧美| 一级黄色片免费看| 91精品欧美一区二区三区综合在 | 国产99久久久| 欧美午夜精品在线| 日韩综合在线观看| 欧美日韩高清在线| 国产www免费观看| 亚洲成人av在线| 青春草在线观看| 中文字幕精品在线视频| 国产超级va在线视频| 九九热精品视频在线播放| 菠萝蜜视频在线观看www入口| 午夜免费日韩视频| 写真福利精品福利在线观看| 国产精品视频在线观看| 精品一级视频| 国产欧美综合精品一区二区| 亚洲综合图色| 中文字幕一区二区三区四区五区| 欧美激情视频一区二区三区免费| 妞干网在线观看视频| 久久久久综合| 天天色天天综合网| jiyouzz国产精品久久| 韩国三级hd中文字幕| 亚洲天堂久久久久久久| 国产精品suv一区二区| 成人av电影免费在线播放| 手机在线成人免费视频| 国精品**一区二区三区在线蜜桃| 4438x全国最大成人| 97成人超碰视| 欧美福利在线视频| 亚洲一区二区偷拍精品| 五月天婷婷导航| 欧美一区二区三区播放老司机| 日本黄色三级视频| 中文字幕精品网| 欧美6一10sex性hd| 国产精品国产亚洲伊人久久 | 国产美女高潮久久白浆| 综合激情五月婷婷| 先锋影音一区二区三区| 黑丝一区二区三区| 成人免费无码av| 国产精品中文字幕日韩精品 | 欧美视频xxx| 在线观看欧美成人| 交100部在线观看| 91久久久久久国产精品| 亚洲传媒在线| 日本久久久网站| 精品中文字幕一区二区小辣椒| 波多野结衣加勒比| 亚洲欧美日韩一区二区 | 日韩欧美久久久| av电影在线观看一区二区三区| 97色在线视频| 国产欧美日韩电影| 亚洲精品9999| 亚洲综合丁香| 国产精品成人99一区无码| 亚洲欧美中日韩| 波多野结衣一区二区三区四区| 亚洲国产成人精品久久久国产成人一区 | 国产精品视频二| 久久er99热精品一区二区| 新91视频在线观看| 精品成人乱色一区二区| 欧美熟妇乱码在线一区| 萌白酱国产一区二区| 国产精品2区| 中文字幕成人一区| 免费精品99久久国产综合精品| 97人妻天天摸天天爽天天| 秋霞一区二区三区| 91超碰rencao97精品| 久久网站免费观看| 中文字幕第36页| 国产午夜亚洲精品羞羞网站| 亚洲免费黄色网址| 国产丝袜一区二区| 欧美裸体视频| 精品在线视频一区二区| 亚洲人成免费| 老熟妇精品一区二区三区| 性久久久久久久久久久久| 乱色精品无码一区二区国产盗| 欧美另类在线观看| 亚洲精品在线a| 韩日视频在线观看| 99这里只有精品| 精品成人av一区二区在线播放| 亚洲精品国偷自产在线99热| 91丝袜在线| 久久久水蜜桃| 久久一二三四| 欧美激情视频二区| 91精品国产欧美一区二区成人 | 中文字幕视频一区| 国产精品无码专区av免费播放| 久久精品久久久久久| 亚洲精品大全| 伊人再见免费在线观看高清版| 国产91富婆露脸刺激对白| 日韩av在线电影| 亚洲欧洲激情在线| 精品久久毛片| 国产成人生活片| caoporn国产一区二区| 高清乱码免费看污| xxav国产精品美女主播| 亚洲视频国产| av免费播放网址| 成人欧美一区二区三区黑人麻豆 | 警花av一区二区三区| 99在线观看视频免费| 91在线丨porny丨国产| 最好看的日本字幕mv视频大全| www.99久久热国产日韩欧美.com| 清纯唯美激情亚洲| 欧美日韩激情视频在线观看| 国产无人区一区二区三区| 国产又粗又猛又爽又黄的| 久久免费高清视频| 成人国产精品一级毛片视频| 日韩精品在线播放视频| 欧美日韩在线第一页| 哥也色在线视频| 久久99久久99精品蜜柚传媒| 美女在线观看视频一区二区| 欧美成人aaaaⅴ片在线看| 一区二区三欧美| 97一区二区国产好的精华液| 午夜国产一区二区三区| 亚洲尤物在线视频观看| 激情小视频在线观看| aaa级精品久久久国产片| 久久午夜精品一区二区| 免费中文字幕视频| 在线观看欧美日韩国产| 加勒比视频一区| 国产精品久久久久久9999| 色综合久久久久久久久| 手机在线免费看av| 在线免费观看成人网| 久久久久久97三级|