1.代理模式(Proxy Pattern):通俗的来讲,我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。即定义为:为其他对象提供一种代理以控制对这个对象的访问。
2.情节描述:比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理。卢俊义的老婆贾氏(就是和那个固管家苟合的那个),这名字起的:“假使”,那我们也让王婆做她的代理。
3.类图描述:
4代码描述:
class XiMenQing
{
static void Main(string[] args)
{
PanJinLian pjl = new PanJinLian();
WangPo wp = new WangPo(pjl);//代理金莲
wp.makeEyesWithMan();
wp.makeHappyWithMan();
Console.WriteLine("--完事---");
wp = new WangPo(new JiaShi());
wp.makeEyesWithMan();
wp.makeHappyWithMan();
Console.ReadKey();
}
}
public interface KindWoman
{
void makeEyesWithMan();
void makeHappyWithMan();
}
public class PanJinLian:KindWoman
{
public void makeEyesWithMan()
{
Console.WriteLine("金莲抛媚眼……");
}
public void makeHappyWithMan()
{
Console.WriteLine("金莲和男人happy……");
}
}
public class JiaShi : KindWoman
{
public void makeEyesWithMan()
{
Console.WriteLine("贾氏抛媚眼……");
}
public void makeHappyWithMan()
{
Console.WriteLine("贾氏和男人happy……");
}
}
public class WangPo : KindWoman
{
private KindWoman kindWoman;
public WangPo()
{
this.kindWoman = new PanJinLian();
}
public WangPo(KindWoman kindWoman)
{
this.kindWoman = kindWoman;
}
public void makeEyesWithMan()
{
this.kindWoman.makeEyesWithMan();
}
public void makeHappyWithMan()
{
this.kindWoman.makeHappyWithMan();
}
}
5.总结
说完这个故事,那额总结一下,代理模式主要使用了面向对象三大特性之一 ——多态,干活的是被代理类,代理类主要是接活,你让我干活,好,我交给幕后的类去干,你满意就成,那怎么知道被代理类能不能干呢?同根就成,大家知根知底,你能做啥,我能做啥都清楚的很,同一个接口或者都继承实现一个类呗,参见另一种描述(利用抽象类进行描述),如图: