猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒。
要求如下:
1. 要有联动性,老鼠和主人的行为是被动的
2. 考虑可扩展性,猫叫叫声可能引起其它的联动效应。
3. 全部使用接口实现
提示:
(一) 受影响的对象的反应的接口。
(二) 叫针对的对象的接口。
(三) 考虑猫叫对多个对象都有影响,在构造函数中加入受影响的对象的集合。
(四) 猫叫后,所有老鼠对象产生反应。
先创建一个影响的接口:
public interface Ieffect
{
void Response();//响应的方法
}
接着再创建一个动物的接口:
interface IAnimal
{
void AddEffect(Ieffect effect);//添加影响
}
创建一个猫类,实现动物接口
class Cat:IAnimal
{
IList<Ieffect> list;
#region IAnimal 成员
public Cat()
{
list = new List<Ieffect>();
}
public void AddEffect(Ieffect animal)
{
list.Add(animal);
}
#endregion
public void Bark()
{
Console.WriteLine("猫叫了一声");
foreach (Ieffect ef in list)
{
ef.Response();
}
}
}
创建一个主人类,实现被影响的接口
class Master:Ieffect
{
public Master(IAnimal animal)
{
animal.AddEffect(this);
}
#region Ieffect 成员
public void Response()
{
Console.WriteLine("主人被惊醒了");
}
#endregion
}
创建一个老鼠类,实现被影响的接口:
class Mouse:Ieffect
{
private string name;
public Mouse(string name,IAnimal animal)
{
this.name = name;
animal.AddEffect(this);
}
#region Ieffect 成员
public void Response()
{
Console.WriteLine("{0},开始逃跑!",this.name);
}
#endregion
}
测试类:
class Program
{
static void Main(string[] args)
{
Cat cat = new Cat();
Mouse m1 = new Mouse("大老鼠", cat);
Mouse m2 = new Mouse("小老鼠",cat);
Master mst = new Master(cat);
cat.Bark();
}
}
接口是不是很好玩?快去试试吧!~~~~