这个方法不错,可以需求清单和用例很好的对应,在我们编写相应程序时不会因为不明确而漏掉什么。
现在有了需求和用例,我们可以开始编码了。首先要修改Remote类型,使其在打开门一段时间之后自动把门关上,代码如下:
public class Remote

{
private DogDoor _door;

Timer time;
TimerCallback callback;

public Remote(DogDoor door)

{
this._door = door;
}

public void pressButton()

{
if (_door.IsOpen)

{
_door.Close();
}
else

{
_door.Open();
callback = new TimerCallback(_door.Close);
time = new Timer(callback,_door,1000,0);
}
}
}

注意,这个地方的变化造成了一些修改,当然程序有很多种写法,这里就不再探讨这个问题了,造成修改的地方是:DogDoor类型中加入一个Close的重载方法:
public void Close(object source)
{
Close();
}
最后我们需要修改原来的测试代码,去掉开门后按按钮的动作,让门自动关闭,在测试代码中用线程休眠来表示Fido已经出去,测试代码如下:
static void Main(string[] args)

{
DogDoor door = new DogDoor();
Remote remote = new Remote(door);
Console.WriteLine("The dog is barking, he wanna
");
remote.pressButton();
Console.WriteLine("The dog is outside and
");
Thread.Sleep(10000);
//remote.pressButton();
Console.WriteLine("The dog is barking, he wanna inside");
remote.pressButton();
Console.WriteLine("The dog is inside");
//remote.pressButton();
Console.Read();
}

测试结果还可以: