一、举例
现在是网购的时代,大家都在网上买过东西,但是当通知您取包裹时正好有事,那就可以让别人帮你取。
买家、代领人、快递员就是代理模式在现实生活中的应用
二、定义和结构图
1、代理模式为其他对象提供一种代理以控制对这个对象的访问
2、结构图
a、Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy
b、RealSubject,定义了Proxy代表的真是实体
c、Proxy,保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用来替代实体
三、代码
以取快递为例
1、代码结构图
2、代码
interface ITakeMail //代理接口
{
void TakeClothes();
void TakeBook();
}
class Delivery //快递员
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
class Buyer : ITakeMail //买家
{
Delivery dd;
public Buyer(Delivery dd)
{
this.dd = dd;
}
public void TakeClothes()
{
Console.WriteLine(dd.Name +"我要取衣服");
}
public void TakeBook()
{
Console.WriteLine(dd.Name +"我要取书");
}
}
class Proxy : ITakeMail //代理
{
Buyer bb;
public Proxy(Delivery dd)
{
bb = new Buyer(dd );
}
public void TakeClothes()
{
bb.TakeClothes();
}
public void TakeBook()
{
bb.TakeBook();
}
}
客户端
static void Main(string[] args)
{
Delivery zhu = new Delivery();
zhu.Name = "朱火云";
Proxy jiahan = new Proxy(zhu );
jiahan.TakeClothes();
jiahan.TakeBook();
Console.Read();
}
运行结果:
代理模式在生活中很常见,也带来很多好处,例子中有不妥的地方还请大家指教。