1. 程式人生 > >設計模式漫談之

設計模式漫談之

核武器 ESS protect str ons 周期 () 通信 戰爭

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

在面向對象中,對象之間的認識是分角度的,比如A對象,B對象,如果A對象存了B對象的引用,那麽從A對象的角度來說,A對象認識B對象,但是B對象不認識A對象,如果B對象也存了A對象的引用,這時,才能說A,B互相認識。

或者是A,B對象互相不認識,但是A,B對象都認識C對象,而C對象認識A,B對象,這樣,可以通過C對象來間接讓A,B對象互相認識,互相通信。扮演紅娘角色,即中介角色。

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

比如種種原因,兩個對象不想直接發生關系,就找一個中間人傳話。

直接上例子,我來解釋:

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

abstract class UnitedNations
{

public abstract void Declare(string message, Country colleague);
}

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

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

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("我們沒有核武器,也不怕侵略。");

總結,對象之間的認識關系分區域性,在哲學中,區域性相當於時間性,對象認識另一個對象,必須可以訪問另一個對象的空間,即另一個對象的引用。

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

設計模式漫談之