大话设计模式
上QQ阅读APP看书,第一时间看更新

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(追求者)’送的。”

“很好,既然两者都有相同的方法,那就意味着他们都怎么样?”

“哦,你的意思是他们都实现了同样的接口?我想,我可以写出代码来了。”

“小菜开窍了。”