7.3 只有代理的代码
十分钟后。
结构图
class Proxy { SchoolGirl mm; public Proxy(SchoolGirl mm) { this.mm = mm; } public void GiveDolls() { Console.WriteLine(mm.Name + " 送你洋娃娃"); } public void GiveFlowers() { Console.WriteLine(mm.Name + " 送你鲜花"); } public void GiveChocolate() { Console.WriteLine(mm.Name + " 送你巧克力"); } }
客户端代码
“小菜,你又犯错了。”
“这又有什么问题,为什么出错的总是我。”小菜非常不爽。
“你把‘Pursuit(追求者)’换成了‘Proxy(代理)’,把‘卓贾易’换成了‘戴励’。这就使得这个礼物变成是戴励送的,而你刚才还肯定地说,‘卓贾易’这个人是存在的,礼物是他买的,你这怎么能正确呢?”
“哦,我明白了,我这样写把‘Pursuit(追求者)’给忽略了,事实上应该是‘Pursuit(追求者)’通过‘Proxy(代理)’送给‘SchoolGirl(被追求者)’礼物,这才是合理的。那我应该如何办呢?”
“不难呀,你仔细观察一下,‘Pursuit(追求者)’和‘Proxy(代理)’有没有相似的地方?”
“他们应该都有送礼物的三个方法,只不过‘Proxy(代理)’送的礼物是‘Pursuit(追求者)’买的,实质是‘Pursuit(追求者)’送的。”
“很好,既然两者都有相同的方法,那就意味着他们都怎么样?”
“哦,你的意思是他们都实现了同样的接口?我想,我可以写出代码来了。”
“小菜开窍了。”