設計模式漫談之中介者模式

天太熱,失眠了,實在睡不下去,就再寫篇文章來靜靜心吧,我爲何寫設計模式,由於設計模式是思想上的東西,程序員的法寶之一就是編程思想。程序員

在面向對象中,對象之間的認識是分角度的,好比A對象,B對象,若是A對象存了B對象的引用,那麼從A對象的角度來講,A對象認識B對象,可是B對象不認識A對象,若是B對象也存了A對象的引用,這時,才能說A,B互相認識。編程

或者是A,B對象互相不認識,可是A,B對象都認識C對象,而C對象認識A,B對象,這樣,能夠經過C對象來間接讓A,B對象互相認識,互相通訊。扮演紅娘角色,即中介角色。設計模式

對象之間的認識分區域性,好比在對象的整個生命中期都認識的對象(父母),或者是過客,我只在某個時間(時間即空間)認識的對象(某個旅遊景點認識的驢友)。ide

好比種種緣由,兩個對象不想直接發生關係,就找一箇中間人傳話。this

直接上例子,我來解釋:設計

//抽象對象UnitedNations在方法中認識Country 對象

abstract class UnitedNations
{

public abstract void Declare(string message, Country colleague);
}生命週期

//具體對象認識USA, Iraq 這兩個對象在方法中認識Country這個對象ci

class UnitedNationsSecurityCouncil : UnitedNations
{
private USA colleague1;
private Iraq colleague2;string

public USA Colleague1
{
set { colleague1 = value; }
}

public Iraq Colleague2
{
set { colleague2 = value; }
}

public override void Declare(string message, Country colleague)
{
if (colleague == colleague1)
{
colleague2.GetMessage(message);
}
else
{
colleague1.GetMessage(message);
}
}
}

//抽象對象認識UnitedNations 這個對象

abstract class Country
{
protected UnitedNations mediator;

public Country(UnitedNations mediator)
{
this.mediator = mediator;
}
}

//具體對象USA在整個生命週期中都認識mediator這個對象

class USA : Country
{
public USA(UnitedNations mediator)
: base(mediator)
{

}

public void Declare(string message)
{
mediator.Declare(message, this);
}

public void GetMessage(string message)
{
Console.WriteLine("美國得到對方信息:" + message);
}
}

//具體對象在整個生命中期都認識mediator

class Iraq : Country
{
public Iraq(UnitedNations mediator)
: base(mediator)
{
}


public void Declare(string message)
{
mediator.Declare(message, this);
}

public void GetMessage(string message)
{
Console.WriteLine("伊拉克得到對方信息:" + message);
}

}

/具體的中介對象

UnitedNationsSecurityCouncil UNSC = new UnitedNationsSecurityCouncil();

//c1 對象認識中介者

USA c1 = new USA(UNSC);

//c2對象也認識中介者
Iraq c2 = new Iraq(UNSC);

//中介者認識c1,c2兩個對象

UNSC.Colleague1 = c1;
UNSC.Colleague2 = c2;

//c1說話,讓中介者傳話

c1.Declare("不許研製核武器,不然要發動戰爭!");

//一樣c2發消息也是讓中介者傳話
c2.Declare("咱們沒有核武器,也不怕侵略。");

 

總結,對象之間的認識關係分區域性,在哲學中,區域性至關於時間性,對象認識另外一個對象,必須能夠訪問另外一個對象的空間,即另外一個對象的引用。

老生常談,編程的法寶之一就是編程思想。

相關文章
相關標籤/搜索