国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

設(shè)計(jì)模式-中介者模式

2019-11-11 03:31:21
字體:
供稿:網(wǎng)友

1.中介者模式的定義及使用場(chǎng)景

定義:

中介者模式包裝了一系列對(duì)象相互作用的方式,使得這些對(duì)象不必相互明顯作用。從而使他們可以松散耦合。當(dāng)某些對(duì)象之間的作用發(fā)生改變時(shí),不會(huì)立即影響其他的一些對(duì)象之間的作用。保證這些作用可以彼此獨(dú)立的變化。中介者模式將多對(duì)多的相互作用轉(zhuǎn)化為一對(duì)多的相互作用。中介者模式將對(duì)象的行為和協(xié)作抽象化,把對(duì)象在小尺度的行為上與其他對(duì)象的相互作用分開處理。

使用場(chǎng)景:

當(dāng)對(duì)象之間的交互操作很多且每個(gè)對(duì)象的行為操作都彼此依賴時(shí),為防止在修改一個(gè)對(duì)象的行為時(shí),同時(shí)涉及修改很多其他對(duì)象的行為,可采用中介者模式,來解決緊耦合問題。該模式將對(duì)象之間的多對(duì)多關(guān)系變成一對(duì)多關(guān)系,中介者對(duì)象將系統(tǒng)從網(wǎng)狀結(jié)構(gòu)變成以調(diào)停者為中心的星形結(jié)構(gòu),達(dá)到降低系統(tǒng)的復(fù)雜性,提高可擴(kuò)展的作用。

2.中介者模式的優(yōu)缺點(diǎn)

2.1優(yōu)點(diǎn)

中介者的模式的優(yōu)點(diǎn)就是減少類間的依賴,把原有的一對(duì)多的依賴變成一對(duì)一的依賴,同事類只依賴中介者,減少依賴,當(dāng)然同時(shí)也降低了類間的耦合

2.2缺點(diǎn)

中介者模式的缺點(diǎn)就是中介者會(huì)膨脹得很大,而且邏輯復(fù)雜,原本N個(gè)對(duì)象直接的相互依賴關(guān)系轉(zhuǎn)換為中介者和同事類的依賴關(guān)系,同事類約多,中介者的邏輯就越復(fù)雜

3.注意實(shí)現(xiàn)

中介者模式是一個(gè)非常好的封裝模式,也是一個(gè)很容易被濫用的模式,一個(gè)對(duì)象依賴幾個(gè)對(duì)象是再正常不過的事情,但是純理論家就會(huì)要求使用中介者模式來封裝這種依賴關(guān)系,這是非常危險(xiǎn)的!使用中介者模式就必然會(huì)帶來中介者的膨脹問題,這在一個(gè)項(xiàng)目中是很不恰當(dāng)?shù)摹?梢栽谌缦碌那闆r嘗試使用中介者模式:1)N個(gè)對(duì)象直接產(chǎn)生了相互的依賴關(guān)系(N>2)2)對(duì)個(gè)對(duì)象有依賴關(guān)系,但是依賴的行為尚不確定或者有發(fā)送改變的可能,在這種情況下一般建議采用中介者模式,降低變更引起的風(fēng)險(xiǎn)擴(kuò)散3)產(chǎn)品開發(fā)。一個(gè)明顯的例子就是MVC框架,把中介者模式應(yīng)用到產(chǎn)品中,可以提升產(chǎn)品的性能擴(kuò)展性,但是對(duì)于項(xiàng)目開發(fā)就未必,因?yàn)轫?xiàng)目是以交付投產(chǎn)為目標(biāo),而產(chǎn)品是以穩(wěn)定、高效、擴(kuò)展為宗旨。

4.中介者模式的實(shí)現(xiàn)方式

public abstract class Colleague {    Mediator mediator;    public Colleague(Mediator mediator) {        this.mediator = mediator;    }    public abstract void action();}
public class ConcreteColleagueA extends Colleague {    public ConcreteColleagueA(Mediator mediator) {        super(mediator);    }    @Override    public void action() {        System.out.PRintln("ColleagueA do action!");    }    public void doPrivateA() {        System.out.println("ColleagueA do private!");    }}
public class ConcreteColleagueB extends Colleague {    public ConcreteColleagueB(Mediator mediator) {        super(mediator);    }    @Override    public void action() {        System.out.println("ColleagueB do action!");    }    public void doPrivateB() {        System.out.println("ColleagueB do private!");    }}
 public abstract class Mediator {    protected ConcreteColleagueA concreteColleagueA;    protected  ConcreteColleagueB concreteColleagueB;    public abstract void method();    public void setConcreteColleagueA(ConcreteColleagueA concreteColleagueA) {        this.concreteColleagueA = concreteColleagueA;    }    public void setConcreteColleagueB(ConcreteColleagueB concreteColleagueB) {        this.concreteColleagueB = concreteColleagueB;    }}
public class ConcreteMediator extends Mediator {    @Override    public void method() {        concreteColleagueA.action();        concreteColleagueB.action();        concreteColleagueA.doPrivateA();        concreteColleagueB.doPrivateB();    }}

5.中介者模式在Android中的實(shí)際應(yīng)用

Android的Activity實(shí)際就是一個(gè)中介者模式,形形式式的View交互都在Activity中統(tǒng)一執(zhí)行,View之間彼此不交互。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 如东县| 错那县| 河津市| 东源县| 沈阳市| 沭阳县| 仲巴县| 仪征市| 曲靖市| 宁都县| 阳城县| 夏津县| 云安县| 巴青县| 腾冲县| 武定县| 炉霍县| 三明市| 交城县| 满洲里市| 西乌| 青河县| 监利县| 城步| 怀仁县| 石台县| 张家川| 延边| 延川县| 正定县| 建宁县| 博客| 井研县| 礼泉县| 承德市| 巫溪县| 伊川县| 香河县| 沾化县| 扎囊县| 成都市|