初识
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。
结构
角色:
- Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy
- RealSubject类,定义Proxy所代表的真实实体。
- Proxy类:保存一个引用使得代理可以访问实体,并提供一个与Subject的接口相同的接口,这样代理就可以用哦来替代实体
应用
代理,我们生活中处处都有代理模式,比如早上我不想买早饭,因为买早饭还得早出门几分钟,所以我就让同学帮忙带早饭,就是应用的代理模式。帮忙带早饭的同学相当于代理类,我相当于委托类,买早饭是我俩都可以实现的接口。
声明接口
interface BuyBreakfast
{
void BuySandwich();
void BuyHamburg();
}
被帮助者类,相当于RealSubject类
class Receiver:BuyBreakfast
{
Person person;
public Receiver(Person person)
{
this.person = person;
}
public void BuySandwich()
{
Console.WriteLine(person.Name+"买三明治");
}
public void BuyHamburg()
{
Console.WriteLine(person.Name+"买汉堡包");
}
}
帮助者类,相当于Proxy类
class Helper:BuyBreakfast
{
Receiver nikita;
public Helper(Person person)
{
nikita = new Receiver(person);
}
public void BuySandwich()
{
nikita.BuySandwich();
}
public void BuyHamburg()
{
nikita.BuyHamburg();
}
}
客户端代码
Person person =new Person();
person.Name = "nikita";
Helper help = new Helper(person);
help.BuyHamburg();
help.BuySandwich();
Console.Read();
优点
- 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。
- 代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度。
缺点
- 由于在客户端和真实对象之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢;
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。