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

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

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

2019-11-11 03:01:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

定義:

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

使用場(chǎng)景:

當(dāng)對(duì)象之間的交互操作很多且每個(gè)對(duì)象的行為操作都彼此依賴(lài)時(shí),為防止在修改一個(gè)對(duì)象的行為時(shí),同時(shí)涉及修改很多其他對(duì)象的行為,可采用中介者模式,來(lái)解決緊耦合問(wèn)題。該模式將對(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)就是減少類(lèi)間的依賴(lài),把原有的一對(duì)多的依賴(lài)變成一對(duì)一的依賴(lài),同事類(lèi)只依賴(lài)中介者,減少依賴(lài),當(dāng)然同時(shí)也降低了類(lèi)間的耦合

2.2缺點(diǎn)

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

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

中介者模式是一個(gè)非常好的封裝模式,也是一個(gè)很容易被濫用的模式,一個(gè)對(duì)象依賴(lài)幾個(gè)對(duì)象是再正常不過(guò)的事情,但是純理論家就會(huì)要求使用中介者模式來(lái)封裝這種依賴(lài)關(guān)系,這是非常危險(xiǎn)的!使用中介者模式就必然會(huì)帶來(lái)中介者的膨脹問(wèn)題,這在一個(gè)項(xiàng)目中是很不恰當(dāng)?shù)???梢栽谌缦碌那闆r嘗試使用中介者模式:1)N個(gè)對(duì)象直接產(chǎn)生了相互的依賴(lài)關(guān)系(N>2)2)對(duì)個(gè)對(duì)象有依賴(lài)關(guān)系,但是依賴(lài)的行為尚不確定或者有發(fā)送改變的可能,在這種情況下一般建議采用中介者模式,降低變更引起的風(fēng)險(xiǎn)擴(kuò)散3)產(chǎn)品開(kāi)發(fā)。一個(gè)明顯的例子就是MVC框架,把中介者模式應(yīng)用到產(chǎn)品中,可以提升產(chǎn)品的性能擴(kuò)展性,但是對(duì)于項(xiàng)目開(kāi)發(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)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄梅县| 枞阳县| 华亭县| 开鲁县| 余干县| 来凤县| 体育| 西和县| 武穴市| 蛟河市| 榕江县| 龙泉市| 济宁市| 阿克苏市| 迭部县| 忻城县| 仙居县| 彭山县| 成武县| 鹰潭市| 宜宾县| 武清区| 永胜县| 金川县| 教育| 稻城县| 三明市| 宝应县| 阆中市| 航空| 枣阳市| 宁陵县| 芦溪县| 财经| 乐山市| 永福县| 威海市| 南乐县| 巴彦淖尔市| 鹤山市| 乃东县|