程序设计:猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。(C#语言)
要求:
1.要有联动性,老鼠和主人的行为是被动的。
2.考虑可扩展性,猫的叫声可能引起其他联动效应。
要点:1.联动效果,运行代码只要执行Cat.Cryed()方法。2.对老鼠和主人进行抽象
评分标准:<1>.构造出Cat、Mouse、Master三个类,并能使程序运行(2分)
<2>从Mouse和Master中提取抽象(5分)
<3>联动效应,只要执行Cat.Cryed()就可以使老鼠逃跑,主人惊醒。(3分)
publicinterfaceObserver
{
voidResponse();//观察者的响应,如是老鼠见到猫的反映
}
publicinterfaceSubject
{
voidAimAt(Observerobs);//针对哪些观察者,这里指猫的要扑捉的对象---老鼠
}
publicclassMouse:Observer
{
privatestringname;
publicMouse(stringname,Subjectsubj)
{
this.name=name;
subj.AimAt(this);
}
publicvoidResponse()
{
Console.WriteLine(name+"attempttoescape!");
}
}
publicclassMaster:Observer
{
publicMaster(Subjectsubj)
{
subj.AimAt(this);
}
publicvoidResponse()
{
Console.WriteLine("Hostwaken!");
}
}
publicclassCat:Subject
{
privateArrayListobservers;
publicCat()
{
this.observers=newArrayList();
}
publicvoidAimAt(Observerobs)
{
this.observers.Add(obs);
}
publicvoidCry()
{
Console.WriteLine("Catcryed!");
foreach(Observerobsinthis.observers)
{
obs.Response();
}
}
}
classMainClass
{
staticvoidMain(string[]args)
{
Catcat=newCat();
Mousemouse1=newMouse("mouse1",cat);
Mousemouse2=newMouse("mouse2",cat);
Mastermaster=newMaster(cat);
cat.Cry();
}
}
//---------------------------------------------------------------------------------------------
设计方法二:使用event--delegate设计..
publicdelegatevoidSubEventHandler();
publicabstractclassSubject
{
publiceventSubEventHandlerSubEvent;
protectedvoidFireAway()
{
if(this.SubEvent!=null)
this.SubEvent();
}
}
publicclassCat:Subject
{
publicvoidCry()
{
Console.WriteLine("catcryed.");
this.FireAway();
}
}
publicabstractclassObserver
{
publicObserver(Subjectsub)
{
sub.SubEvent+=newSubEventHandler(Response);
}
publicabstractvoidResponse();
}
publicclassMouse:Observer
{
privatestringname;
publicMouse(stringname,Subjectsub):base(sub)
{
this.name=name;
}
publicoverridevoidResponse()
{
Console.WriteLine(name+"attempttoescape!");
}
}
publicclassMaster:Observer
{
publicMaster(Subjectsub):base(sub){}
publicoverridevoidResponse()
{
Console.WriteLine("hostwaken");
}
}
classClass1
{
staticvoidMain(string[]args)
{
Catcat=newCat();
Mousemouse1=newMouse("mouse1",cat);
Mousemouse2=newMouse("mouse2",cat);
Mastermaster=newMaster(cat);
cat.Cry();
}
}
如果觉得《java猫大叫一声_猫大叫一声 所有的老鼠都开始逃跑 主人被惊醒 | 学步园》对你有帮助,请点赞、收藏,并留下你的观点哦!