小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

中介者模式

 印度阿三17 2019-05-29

中介者模式(Mediator Pattern),又稱調(diào)停者模式,是行為類模式的一種。

定義

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

類圖及組成

在這里插入圖片描述

  1. 抽象中介者:定義好同事類對象到中介者對象的接口,用于各個同事類之間的通信。一般包括一個或幾個抽象的事件方法,并由子類去實現(xiàn)。
  2. 中介者實現(xiàn)類:從抽象中介者繼承而來,實現(xiàn)抽象中介者中定義的事件方法。從一個同事類接收消息,然后通過消息影響其他同時類。
  3. 同事類
  4. 同事類實現(xiàn)類:如果一個對象會影響其他的對象,同時也會被其他對象影響,那么這兩個對象稱為同事類。同事類一般由多個組成,他們之間相互影響,相互依賴。在中介者模式中,同事類之間必須通過中介者才能進(jìn)行消息傳遞。

優(yōu)點

  1. 簡化了對象之間的關(guān)系,將系統(tǒng)的各個對象之間的關(guān)系進(jìn)行封裝,將各個同事類進(jìn)行解耦,使系統(tǒng)成為松耦合系統(tǒng)。
  2. 減少子類的生成。
  3. 減少各同事類的設(shè)計與實現(xiàn)。

缺點

由于中介者對象(中介者模式的核心)封裝了各對象間的相互關(guān)系,導(dǎo)致其變得非常復(fù)雜,系統(tǒng)維護(hù)困難。

原理

中介者模式通過中介者類簡化了系統(tǒng)的結(jié)構(gòu),將系統(tǒng)中有關(guān)對象引用的其他對象數(shù)目減到最少,將網(wǎng)狀結(jié)構(gòu)變?yōu)樾切徒Y(jié)構(gòu),中介者對象在這里起到中轉(zhuǎn)和協(xié)調(diào)作用。

在這里插入圖片描述

中介者模式和外觀模式的區(qū)別?

  1. 中介者介于子系統(tǒng)和子系統(tǒng)之間,外觀模式介于客戶和子系統(tǒng)之間。
  2. 外觀模式將原有復(fù)雜邏輯提取到一個統(tǒng)一的接口,簡化客戶端的使用。中介者模式并沒有改變客戶原有的習(xí)慣,是隱藏在邏輯后面的,使得代碼邏輯清晰可用。

注:當(dāng)系統(tǒng)中連續(xù)出現(xiàn)‘多對多’交互復(fù)雜的對象群,不要急于使用中介者模式,首先反思系統(tǒng)的設(shè)計是否合理。即使使用中介者模式時也要注意控制中介者類的大小。

案例代碼

//抽象中介者類
public abstract class Mediator {
	public abstract void send(String message, Colleague colleague);
}
//中介者實現(xiàn)類
public class ConcreteMediator extends Mediator {
	// 需要了解所有的具體同事對象
    private ConcreteColleague1 c1;
    private ConcreteColleague2 c2;

    public ConcreteColleague1 getC1() {
	   return c1;
    }

    public void setC1(ConcreteColleague1 c1) {
	   this.c1 = c1;
    }

    public ConcreteColleague2 getC2() {
	   return c2;
    }

    public void setC2(ConcreteColleague2 c2) {
	   this.c2 = c2;
    }

    @Override
    public void send(String message, Colleague colleague) {
		// 重寫發(fā)送信息的方法,根據(jù)對象做出選擇判斷,通知對象
		if (colleague == c1) {
		    c2.notifyMsg(message);
		} else {
		    c1.notifyMsg(message);
		}
    }
}
//抽象同事類
public abstract class Colleague {
	protected Mediator mediator;

    public Colleague(Mediator mediator) {
	    this.mediator = mediator;
    }

    public abstract void sendMsg(String message);
    
    public abstract void notifyMsg(String message);
}
//同事類實現(xiàn)類
public class ConcreteColleague1 extends Colleague {
	public ConcreteColleague1(Mediator mediator) {
	    super(mediator);
    }

    @Override
    public void sendMsg(String message) {
	   mediator.send(message, this);
    }

    @Override
    public void notifyMsg(String message) {
	   System.out.println("同事1得到消息:"   message);
    }
}
public class ConcreteColleague2 extends Colleague {
	
	public ConcreteColleague2(Mediator mediator) {
	    super(mediator);
    }

    @Override
    public void sendMsg(String message) {
	    mediator.send(message, this);
    }

    @Override
    public void notifyMsg(String message) {
	   System.out.println("同事2得到消息:"   message);
    }

}
-------------------------------------------------------------------------------------






來源:http://www./content-4-215351.html

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多