中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

淘寶網(wǎng)站建設(shè)哪個類目/seo公司

淘寶網(wǎng)站建設(shè)哪個類目,seo公司,物聯(lián)網(wǎng)技術(shù)是學什么的,青島知名設(shè)計公司中介者模式 中介者模式主要是將關(guān)聯(lián)關(guān)系由一個中介者類統(tǒng)一管理維護,一般來說,同事類之間的關(guān)系是比較復雜的,多個同事類之間互相關(guān)聯(lián)時,他們之間的關(guān)系會呈現(xiàn)為復雜的網(wǎng)狀結(jié)構(gòu),這是一種過度耦合的架構(gòu),即…

中介者模式

中介者模式主要是將關(guān)聯(lián)關(guān)系由一個中介者類統(tǒng)一管理維護,一般來說,同事類之間的關(guān)系是比較復雜的,多個同事類之間互相關(guān)聯(lián)時,他們之間的關(guān)系會呈現(xiàn)為復雜的網(wǎng)狀結(jié)構(gòu),這是一種過度耦合的架構(gòu),即不利于類的復用,也不穩(wěn)定。例如在下左圖中,有六個同事類對象,假如對象1發(fā)生變化,那么將會有4個對象受到影響。如果對象2發(fā)生變化,那么將會有5個對象受到影響。也就是說,同事類之間直接關(guān)聯(lián)的設(shè)計是不好的。如果引入中介者模式,那么同事類之間的關(guān)系將變?yōu)樾切徒Y(jié)構(gòu),從下右圖中可以看到,任何一個類的變動,只會影響的類本身,以及中介者,這樣就減小了系統(tǒng)的耦合。一個好的設(shè)計,必定不會把所有的對象關(guān)系處理邏輯封裝在本類中,而是使用一個專門的類來管理那些不屬于自己的行為。
在這里插入圖片描述
定義: 又叫調(diào)停模式,定義一個中介角色來封裝一系列對象之間的交互,使原有對象之間的耦合松散,且可以獨立地改變它們之間的交互。中介者模式包含以下主要角色:

  • 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事對象注冊與轉(zhuǎn)發(fā)同事對象信息的抽象方法。

  • 具體中介者(ConcreteMediator)角色:實現(xiàn)中介者接口,定義一個 List 來管理同事對象,協(xié)調(diào)各個同事角色之間的交互關(guān)系,因此它依賴于同事角色。

  • 抽象同事類(Colleague)角色:定義同事類的接口,保存中介者對象,提供同事對象交互的抽象方法,實現(xiàn)所有相互影響的同事類的公共功能。

  • 具體同事類(Concrete Colleague)角色:是抽象同事類的實現(xiàn)者,當需要與其他同事對象交互時,由中介者對象負責后續(xù)的交互。

案例實現(xiàn)

【例】租房

現(xiàn)在租房基本都是通過房屋中介,房主將房屋托管給房屋中介,而租房者從房屋中介獲取房屋信息。房屋中介充當租房者與房屋所有者之間的中介者。

類圖如下:

在這里插入圖片描述

代碼如下:

首先租客和房東都是人,我們先定義Person抽象類,然后具體實現(xiàn)租客Tenant和房東HouseOwner類,代碼如下:

// 抽象類
public abstract class Person {protected String name;protected Mediator mediator; // 持有一個中介者對象public Person(String name,Mediator mediator){this.name = name;this.mediator = mediator;}public abstract String getMessage(String msg);
}// 租客具體實現(xiàn)
public class Tenant extends Person{private String lease; // 租客租期public Tenant(String name,String lease, Mediator mediator) {super(name, mediator);this.lease = lease;}public String getMessage(String msg){System.out.println("我是租客,收到了中介發(fā)來的信息為:"+msg);return "我叫" + name +",我的想租"+lease;}
}// 房東具體實現(xiàn)
public class HouseOwner extends Person{private String address; // 房東房子地址public HouseOwner(String name,String address, Mediator mediator) {super(name, mediator);this.address = address;}//獲取信息public String getMessage(String msg){System.out.println("我是房東,收到中介發(fā)來的信息:"+msg);return "我叫" + name +",房子的位置是"+address;}
}

注意,上面的HouseOwnerTenant(都是同事類)都持有中介者對象,目的是讓亂七八糟的同事類都和中介者類進行關(guān)聯(lián),而不是讓同事類相互關(guān)聯(lián),后面進行調(diào)用只需要通過中介者類即可,下面定義中介者類:

// 抽象中介類
public abstract class Mediator {private String name;public Mediator(String name){this.name = name;}public abstract String constact(String msg,Person person);
}// 中介類具體實現(xiàn)
public class MediatorCompany extends Mediator{private HouseOwner houseOwner;private Tenant tenant;public MediatorCompany(String name) {super(name);}@Overridepublic String constact(String msg,Person person) {if(person instanceof HouseOwner){// 如果是房東return houseOwner.getMessage(msg);}if(person instanceof Tenant){// 如果是租客return tenant.getMessage(msg);}return null;}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;}
}

上面的代碼只是維護了租客和房東兩個同事類,如果還有其他的同事類例如開發(fā)商、政府、A公司、B公司等,那么constact的邏輯就比較復雜了。但是優(yōu)點是將所有同事類都關(guān)聯(lián)到一個中介者類中,減少了同事類之間的復雜關(guān)聯(lián)關(guān)系。下面要實現(xiàn)房東和組合的通信或者調(diào)用,只需要通過中介者實現(xiàn)類即可,測試代碼如下:

public class Main {public static void main(String[] args) {// 中介公司MediatorCompany mediatorCompany = new MediatorCompany("王牌中介公司");// 實例化同事類HouseOwner houseOwner = new HouseOwner("馬云", "杭州西溪阿里園區(qū)",mediatorCompany);Tenant tenant = new Tenant("馬化騰", "99年", mediatorCompany);mediatorCompany.setTenant(tenant);mediatorCompany.setHouseOwner(houseOwner);String msg1 = mediatorCompany.constact("你的房子什么情況呀?",houseOwner);System.out.println("房東回復:"+msg1);String msg2 = mediatorCompany.constact("你想租多久呀?",tenant);System.out.println("租客回復:"+msg2);}
}

結(jié)果輸出:

我是房東,收到中介發(fā)來的信息:你的房子什么情況呀?
房東回復:我叫馬云,房子的位置是杭州西溪阿里園區(qū)
我是租客,收到了中介發(fā)來的信息為:你想租多久呀?
租客回復:我叫馬化騰,我的想租99年

優(yōu)點

  • 松散耦合

    中介者模式通過把多個同事對象之間的交互封裝到中介者對象里面,從而使得同事對象之間松散耦合,基本上可以做到互補依賴。這樣一來,同事對象就可以獨立地變化和復用,而不再像以前那樣“牽一處而動全身”了。

  • 集中控制交互

    多個同事對象的交互,被封裝在中介者對象里面集中管理,使得這些交互行為發(fā)生變化的時候,只需要修改中介者對象就可以了,當然如果是已經(jīng)做好的系統(tǒng),那么就擴展中介者對象,而各個同事類不需要做修改。

  • 一對多關(guān)聯(lián)轉(zhuǎn)變?yōu)橐粚σ坏年P(guān)聯(lián)

    沒有使用中介者模式的時候,同事對象之間的關(guān)系通常是一對多的,引入中介者對象以后,中介者對象和同事對象的關(guān)系通常變成雙向的一對一,這會讓對象的關(guān)系更容易理解和實現(xiàn)。

缺點

當同事類太多時,中介者的職責將很大,它會變得復雜而龐大,以至于系統(tǒng)難以維護。

使用場景

  • 系統(tǒng)中對象之間存在復雜的引用關(guān)系,系統(tǒng)結(jié)構(gòu)混亂且難以理解。
  • 當想創(chuàng)建一個運行于多個類之間的對象,又不想生成新的子類時。

參考內(nèi)容:

傳智播客設(shè)計模式相關(guān)筆記(主要)

http://www.risenshineclean.com/news/69.html

相關(guān)文章:

  • 做網(wǎng)站怎么偷源碼做網(wǎng)站/阿里seo排名優(yōu)化軟件
  • 電商網(wǎng)站建設(shè)與運營/網(wǎng)站管理
  • 文學投稿網(wǎng)站平臺建設(shè)/好f123網(wǎng)站
  • 做網(wǎng)站策劃需要用什么軟件/bt磁力搜索引擎在線
  • 沈陽網(wǎng)站建設(shè)制作公司/友情鏈接怎么設(shè)置
  • 學校資源網(wǎng)站的建設(shè)方案/東莞seo推廣機構(gòu)帖子
  • 建設(shè)部資質(zhì)上報系統(tǒng)網(wǎng)站/重慶百度推廣優(yōu)化
  • 南昌網(wǎng)站建設(shè)哪家好/什么軟件可以推廣自己的產(chǎn)品
  • 個人網(wǎng)站 作品/站長之家工具
  • 吳謹含廠家不愿做網(wǎng)站/平臺網(wǎng)站開發(fā)公司
  • 網(wǎng)站項目策劃書實例/網(wǎng)絡(luò)推廣深圳有效渠道
  • wordpress 支持html5/網(wǎng)站標題算關(guān)鍵詞優(yōu)化嗎
  • 在京東上怎樣做網(wǎng)站/免費平臺推廣
  • 阿里自助建站平臺/網(wǎng)站優(yōu)化公司收費
  • 如何建立一個網(wǎng)站分享教程/推廣賺傭金的軟件排名
  • 網(wǎng)站設(shè)計寬屏/品牌策略有哪些
  • 網(wǎng)站建設(shè)系統(tǒng)哪個好/seo點擊排名軟件營銷工具
  • 建設(shè)文明網(wǎng) 聯(lián)盟網(wǎng)站的/學seo推廣
  • 武漢網(wǎng)站建設(shè) loongnet/百度云官網(wǎng)
  • 如何建設(shè)一個屬于自己的網(wǎng)站/引擎優(yōu)化seo
  • 南寧做網(wǎng)站外包/品牌宣傳策略有哪些
  • 怎樣做網(wǎng)站反鏈/北京網(wǎng)站優(yōu)化多少錢
  • 軟件外包收費標準/重慶網(wǎng)站關(guān)鍵詞排名優(yōu)化
  • 網(wǎng)站建設(shè)ppt答辯/seo優(yōu)化包括什么
  • 網(wǎng)站建設(shè)網(wǎng)址網(wǎng)站制作/長沙百度seo
  • 咸寧市住房和城鄉(xiāng)建設(shè)委員會網(wǎng)站/數(shù)字營銷策劃
  • 給網(wǎng)站平臺做推廣叫什么/產(chǎn)品推廣平臺
  • 門戶網(wǎng)站源碼入駐/站長之家收錄查詢
  • 國外b2b網(wǎng)站是什么意思/百度指數(shù)官網(wǎng)
  • 網(wǎng)站做支付需要準備什么東西嗎/seo技術(shù)培訓唐山