前言:我也是初学者,有不妥之处希望大家能提出意见。另外转载请注明作者和出处,毕竟花了快一周的时间才完成。
浏览更多设计模式与和申、纪晓岚的故事
话说乾隆、和申、纪晓岚三人离京巡游,一日来到一个村庄,村子有一户人家住着一个漂亮姑娘和她的母亲老夫人。姑娘喜欢三件事情:美食、购物、旅游,但是这三件事情都是老夫人最厌恶的,她希望自己的女儿能做两件事情:读书、练字,可是姑娘一听见这些东西就头痛。
乾隆知道这些情况后想考察一下两个大臣的能力,于是他给和申、纪晓岚每人三天时间,看谁能把姑娘泡到手,让和申先来。
和申心想,这还不好办吗?我就投姑娘所好,Eating 、Shopping 、Travelling 三招把她搞定。和申他们有的是钱,第一天下来,姑娘非常满意,没想到老夫人火了,把和申臭骂了一顿,说他是个不学无术的小混混,从此再不让进门。和申的泡妞计划以失败告终。
纪晓岚心想,我可不能像和申那样,我要先和姑娘约定好暗号,出门的时候要说老夫人爱听的,实际上做的是姑娘爱做的,说一套做一套,这样两个人都可以搞定了。暗号如下:
Reading:老夫人以为是去读书,实际上出了门就去 Eating 和 Shopping 了
Writing:老夫人以为是去练字,实际上出了门就去 Travelling 了
这套暗号约定实际上就是个适配器。它把对外的接口从姑娘希望的 Eating 、Shopping 、Travelling 变成了老夫人希望的 Reading 和 Writing ,这样就可以顺利通过老夫人这一关了;但实际上做的还是姑娘希望的 Eating 、Shopping 、Travelling ,这样姑娘也满意。
哈哈,这应该就是投其所好,说一套做一套了吧!事情从表面上看是一回事,实际上内部的实现可能是另一回事。最后当然是纪晓岚赢得了芳心。
下面我们用代码来讲述这个故事吧:
Adapter.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Adapter
...{
//姑娘希望的接口:但是由于老夫人不喜欢这些东西,不能直接使用了
public class Girl
...{
public void Eating()
...{
System.Console.WriteLine("不用装样子了,我要吃大闸蟹!");
System.Console.WriteLine();
}
public void Shopping()
...{
System.Console.WriteLine("不用装样子了,买一件今年最流行的小背心!");
System.Console.WriteLine();
}
public void Travelling()
...{
System.Console.WriteLine("不用装样子了,后山是个不错的地方哦!");
System.Console.WriteLine();
}
}
//老夫人希望的接口:要想约姑娘出来,必须告诉老夫人,我们是去做您喜欢的事情去了
public interface Mother
...{
void Reading();
void Writing();
}
//纪晓岚和姑娘的约定,精髓就是客户喜欢什么就让他看见什么,实际上做的还是原来的那一套东西
public class Agreement : Mother
...{
Girl girl = new Girl();
//说的是去读书,那是给老夫人(客户端)看的,实际上呢?
public void Reading()
...{
girl.Eating();
girl.Shopping();
}
public void Writing()
...{
girl.Travelling();
}
}
}
客户端:Client.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace Adapter
...{
class Client
...{
static void Main(string[] args)
...{
Agreement ag = new Agreement();
Console.WriteLine("纪晓岚:老夫人,我们去读书了!");
Console.WriteLine("老夫人:乖,好好读呀!");
ag.Reading();
Console.WriteLine();
Console.WriteLine("纪晓岚:老夫人,我们去练字了!");
Console.WriteLine("老夫人:好呀好呀!");
ag.Writing();
System.Console.Read();
}
}
}
运行结果如下图:
浏览更多设计模式与和申、纪晓岚的故事