原本关系:
狗猫鼠:
CatA看见狗会跑,CatB看见狗会对叫
MouseA看见猫会跑,MouseB看见猫会对叫
实现如下:
狗叫了,名叫CatA的猫跑了,名叫CatB的猫叫了(意思就是对叫,表示不怕狗,也就是不跑)
猫叫了,名叫MouseA的老鼠跑了,名叫MouseB的老鼠叫了(意思就是对叫,表示不怕狗,也就是不跑)
输出显示:
事件发生---->狗DogA叫了
名叫CatA的猫跑了它看见了DogA
名叫CatB的猫叫了它看见了DogA
名叫MouseA的老鼠跑了它看见了CatB
名叫MouseB的老鼠叫了它看见了CatB
事件发生---->猫CatA叫了
名叫MouseA的老鼠跑了它看见了CatA
名叫MouseB的老鼠叫了它看见了CatA
定义5个类
Aniaml
Dog: Aniaml
Cat : Aniaml
Mouse : Aniaml
AnimalEvent
private string _name;
protected string Name
{
get { return _name; }
set { _name = value; }
}
public virtual void Run(){}
public virtual void Shout(){}
public virtual void Run(AnimalEvent a){}
public virtual void Shout(AnimalEvent a){}
}
public override void Shout()
{
Console.WriteLine("Cat:" + Name + " 叫,喵~~~");
if (ShoutBox != null)
{
AnimalEvent aa = new AnimalEvent();
aa.Name = Name;
ShoutBox(aa);
}
}
public override void Shout(AnimalEvent a)
{
Console.WriteLine("Cat:" + Name + " 叫,喵~~~,我遇到" + a.Name + "了");
if (ShoutBox != null)
{
AnimalEvent aa=new AnimalEvent ();
aa.Name=Name;
ShoutBox(aa);
}
}
public override void Run()
{
Console.WriteLine("Cat:" + Name + "逃跑了,喵555~~~");
}
public override void Run(AnimalEvent a)
{
Console.WriteLine("Cat:" + Name + "逃跑了,喵555~~~,我遇到" + a.Name + "了");
}
}
}
控制台代码:
当前功能可以实现,但是,
现在是狗,猫,鼠
如果有10条狗,Dog1到10
6条猫,Cat1到6
8只老鼠,Mouse1到8
如果出现行为的特殊化 ,也就是说,Cat1看到Dog1、2、6、8跑,其他都是叫;Mouse1看到Cat3、4、5跑,其他叫,
或者
行为出现数量化 ,也就是说CAT1看到DOG1、3、5会跑,看到DOG2会跳,等其他的行为
那这个事件添加的方式感觉相当不太好,等待以后重构