主要功能是锹锰,將游戲的多個(gè)系統(tǒng)進(jìn)行關(guān)聯(lián)掏导,邏輯更加清楚享怀,調(diào)用很方便:
<pre>
例子系統(tǒng)可能不全,只是舉一個(gè)例子:
</pre>
下圖是游戲主要的系統(tǒng):
成就系統(tǒng)示例趟咆,其他系統(tǒng)類似添瓷,幾個(gè)方法的介紹:
第一個(gè)是構(gòu)造函數(shù),第二個(gè)是系統(tǒng)初始化值纱,第三個(gè)是系統(tǒng)結(jié)束鳞贷,第四個(gè)是系統(tǒng)更新,少了一個(gè)系統(tǒng)的開始的方法虐唠。
外觀模式:
以上述案例為例悄晃,因?yàn)閼?zhàn)斗系統(tǒng)需要使用到游戲的其他幾個(gè)系統(tǒng),通常的方式是在戰(zhàn)斗系統(tǒng)中直接調(diào)用,但是使用到外觀模式的話妈橄,創(chuàng)建一個(gè)總的調(diào)度類庶近,讓戰(zhàn)斗系統(tǒng)和這個(gè)總的調(diào)度類完成其功能,調(diào)度類包含了其他系統(tǒng)的功能眷蚓。(注意總的調(diào)度類是一個(gè)單例鼻种,需要用到單例模式)
中介者模式:
在游戲中,很多系統(tǒng)內(nèi)部需要互相調(diào)度沙热,如果是各個(gè)系統(tǒng)之間直接互相調(diào)度的話叉钥,邏輯會(huì)非常復(fù)雜,很容易混亂篙贸,采用中介者模式的話投队,增加一個(gè)中介者功能的類,負(fù)責(zé)調(diào)度所有系統(tǒng)爵川,其余的子系統(tǒng)只需要和中介者類交互即可敷鸦,邏輯就很簡(jiǎn)單了。
寫的時(shí)候注意要在中介者類需要重新寫所有子系統(tǒng)中的公共方法寝贡,讓其他的子系統(tǒng)調(diào)用扒披。
eg,p1和p2通過(guò)中介發(fā)送消息:
//person和Zj的總抽象類
abstract class Zj
{
//參數(shù)意思:發(fā)送的消息內(nèi)容圃泡,是誰(shuí)發(fā)送
public abstract void ReSend(string msg, Person person);
}
abstract class Person
{
protected Zj zj;
public Person(Zj zj)
{
this.zj = zj;
}
}
繼承抽象類的類
//中介者類
class ZJ_1:Zj
{
private Person1 p1;
private Person2 p2;
//初始化需要發(fā)送消息的人
public Person1 P1
{
set { p1 = value; }
}
public Person2 P2
{
set { p2 = value; }
}
//轉(zhuǎn)發(fā)person的消息
public override void ReSend(string msg, Person person)
{
if (person == p1)
{
p2.Receive(msg);
}
else
{
p1.Receive(msg);
}
}
}
發(fā)送消息的人類:
//person1
class Person1:Person
{
public Person1(ZJ_1 zj) : base(zj)
{
}
public void Send(string msg)
{
zj.ReSend(msg,this);
}
public void Receive(string msg)
{
Console.WriteLine("Person1收到消息:"+msg);
}
}
//person2
class Person2:Person
{
public Person2(ZJ_1 zj) : base(zj)
{
}
public void Send(string msg)
{
zj.ReSend(msg,this);
}
public void Receive(string msg)
{
Console.WriteLine("Person2收到消息:" + msg);
}
}
主函數(shù)體:
//實(shí)現(xiàn)方式
static void Main(string[] args)
{
ZJ_1 z=new ZJ_1();//創(chuàng)建中介者實(shí)力
Person1 p1 = new Person1(z);//創(chuàng)建p1實(shí)例碟案,同時(shí)把中介者傳入
Person2 p2 = new Person2(z);//創(chuàng)建p2實(shí)例,同時(shí)把中介者傳入颇蜡,需要與p1一致
//在中介者中初始化需要通信的兩個(gè)人物
z.P1 = p1;
z.P2 = p2;
//直接在人物中調(diào)用send方法价说,send方法會(huì)自動(dòng)調(diào)用zj的resend方法發(fā)送消息給p2
p1.Send("你好啊,P2");
p2.Send("你也好啊风秤,p1");
Console.ReadKey();
}
這兩個(gè)模式的區(qū)別是鳖目,外觀模式是針對(duì)模塊的外部系統(tǒng)使用使用,相當(dāng)于外觀模式把一個(gè)系統(tǒng)所有的功能打包好了唁情,提供一些接口給外界來(lái)使用這個(gè)系統(tǒng)的功能疑苔;
中介者模式是針對(duì)模塊內(nèi)部甫匹,各個(gè)系統(tǒng)之間的互相調(diào)度甸鸟。