日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式:中介者模式(Mediator)

發(fā)布時間:2024/4/11 asp.net 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式:中介者模式(Mediator) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計與實踐原理》和《RabbitMQ實戰(zhàn)指南》,同時歡迎關(guān)注筆者的微信公眾號:朱小廝的博客。


歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/design_pattern/mediator/

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

中介者模式中的角色:

  • 抽象中介者(Mediator):定義了同事對象到中介者對象之間的接口。
  • 具體中介者(ConcreteMediator):定義抽象中介者的方法,它需要知道所有的具體同事類,同時需要從具體的同事類那里接收消息,并且向具體的同事類發(fā)送信息。
  • 抽象同事類(Colleague)
  • 具體同事類(ConcreteColleague):每個具體同事類都只需要知道自己的行為即可,但是它們都需要認識中介者。
  • 案例1:
    房屋租賃中介就是一個很好的中介模式,租客只知道自己和中介,房東也只知道自己和中介,但是中介必須知道租客和房東。(在我們的生活中處處充斥著“中介者”,比如租房、買房、出過留學、找工作、旅游等可能都需要哪些中介者的幫助。)
    1 抽象中介者

    public interface Mediator {void contact(String message, Person person); }

    2 抽象同事類

    public abstract class Person {protected String name;protected Mediator mediator;Person(String name, Mediator mediator){this.name = name;this.mediator = mediator;} }

    3 具體同事類
    房東:

    public class HouseOwner extends Person {HouseOwner(String name, Mediator mediator){super(name, mediator);}public void contact(String message){mediator.contact(message, this);}public void getMessage(String message){System.out.println("HouseOwner : "+name+", Get Message: "+message);} }

    租客:

    public class Tenant extends Person {Tenant(String name, Mediator mediator){super(name, mediator);}public void contact(String message){mediator.contact(message, this);}public void getMessage(String message){System.out.println("Tenant : "+name+", Get Message: "+message);} }

    4 中介

    public class MediatorStructure implements 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;}@Overridepublic void contact(String message, Person person){if(person == houseOwner){tenant.getMessage(message);}else{houseOwner.getMessage(message);}} }

    5 測試代碼

    MediatorStructure mediator = new MediatorStructure();HouseOwner houseOwner = new HouseOwner("qq",mediator);Tenant tenant = new Tenant("jj",mediator);mediator.setHouseOwner(houseOwner);mediator.setTenant(tenant);tenant.contact("I wanna a house");houseOwner.contact("I have~");

    運行結(jié)果:

    HouseOwner : qq, Get Message: I wanna a house Tenant : jj, Get Message: I have~

    優(yōu)缺點
    優(yōu)點

  • 適當?shù)氖褂弥薪檎吣J娇梢员苊馔骂愔g的過渡耦合,使得各同事類之間可以相對獨立地使用。
  • 減少子類的生成。
  • 可以減少各同事類的設(shè)計與實現(xiàn)。
  • 缺點

  • 由于中介者對象封裝了系統(tǒng)中的對象之間的相互關(guān)系,導(dǎo)致其變得非常復(fù)雜,使得系統(tǒng)維護比較困難。中介者需要知道每個對象和他們之間的交互細節(jié),如果它出問題,將會導(dǎo)致整個系統(tǒng)都會出現(xiàn)問題。所以它比較容易應(yīng)用也很容易誤用。故當系統(tǒng)中出現(xiàn)了“多對多”交互復(fù)雜的關(guān)系群時,千萬別記著使用中介者模式,你首先需要做的就是反思你的系統(tǒng)在設(shè)計上是不是合理。再者,在實際工作中,中介者模式也并不多見。

  • 適用場景

  • 系統(tǒng)中對象之間存在比較復(fù)雜的引用關(guān)系,導(dǎo)致它們之間的依賴關(guān)系結(jié)構(gòu)混亂而且難以復(fù)用該對象。
  • 想通過一個中間類來封裝多個類中的行為,而又不想生成太多的子類。
  • JDK中的中介者模式:
    java.util.Timer
    java.util.concurrent.Executor#execute()
    java.util.concurrent.ExecutorService#submit()
    java.lang.reflect.Method#invoke()


    參考資料

  • 23種設(shè)計模式
  • 細數(shù)JDK里的設(shè)計模式
  • 設(shè)計模式讀書筆記—–中介者模式
  • 歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/design_pattern/mediator/


    歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計與實踐原理》和《RabbitMQ實戰(zhàn)指南》,同時歡迎關(guān)注筆者的微信公眾號:朱小廝的博客。


    總結(jié)

    以上是生活随笔為你收集整理的设计模式:中介者模式(Mediator)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。