通过引入一个新的对象来实现对真实对象的操作或将新的对象作为真实对象的一个替身,这样的实现机制是代理模式。
定义:为其他对象提供一种代理以控制对这个对象的访问。
实质:控制对象访问
动机:通过引入代理对象来间接访问一个对象,就是代理模式的动机
结构图:
实例:
class Program
{
static void Main(string[] args)
{
SchoolGirl jiaojiao = new SchoolGirl();
jiaojiao.Name = "婧姐,";
Proxy daili = new Proxy(jiaojiao);
daili.GiveChocolate();
daili.GiveDolls();
daili.GiveFlowers();
}
}
interface IGiveGift //接口
{
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
class SchoolGirl //被追求者类
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
class Pursuit: IGiveGift //追求者实现接口
{
SchoolGirl mm;
public Pursuit(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 + "给你巧克力");
}
}
class Proxy : IGiveGift //代理实现接口
{
Pursuit gg;
public Proxy(SchoolGirl mm)
{
gg = new Pursuit(mm);
}
public void GiveDolls()
{
gg.GiveDolls(); //调用追求者类的方法
}
public void GiveFlowers()
{
gg.GiveFlowers();//调用追求者类的方法
}
public void GiveChocolate()
{
gg.GiveChocolate();//调用追求者类的方法
}
}
运行结果:
应用:
第一:远程代理,为一个对象在不同的地址空间提供局部代表,这样,可以隐藏一个对象存在于不同地址空间的事实。
第二:虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
第三:安全代理,控制真实对象访问时的权限。
第四:智能指引,当调用真实对象时,代理处理另外一些事。
优点:
职责清晰,真实的角色就是实现实际业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成事务。
代理对象可以在客户端和目标对象之间起到中介作用,保护了目标对象。