代理模式是代理类和对象(被代理类)二者共用相同的接口(方法)。客户端通过代理类和对象进行联系。
具体看设计模式中的列子,然后进行分析:
代理接口:
interface IGiveGift//代理接口
{
void GiveDolls();
void GiveFlowers();
}
被代理的对象:
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 + "送你花儿");
}
}
代理类,和被代理对象共用相同的接口
class Proxy:IGiveGift//代理类
{
Pursuit gg;
public Proxy(SchoolGirl mm)
{
gg = new Pursuit(mm);
}
public void GiveDolls()
{
gg.GiveDolls();
}
public void GiveFlowers()
{
gg.GiveFlowers();
}
}
被追求者类,存在的意义是给追求者(被代理对象)传值。
class SchoolGirl//被追求者类
{
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
}
客户端:
class Program
{
static void Main(string[] args)
{
SchoolGirl jiao = new SchoolGirl();
jiao.Name = "娇";
Proxy daili = new Proxy(jiao);
daili.GiveFlowers();
daili.GiveDolls();
Console.ReadKey();
}
}
分析:
1、实例化被追求者,给其的属性赋值,以便传给追求者。
2、实例化代理类,将被追求者的属性值(名字)传给了追求者。
3、代理类采取行动,也就是调用代理类的方法。
4、代理类的方法就是调用追求者的方法,第2步已经将被追求者的名字传给了追求者,所以追求者具有被追求者的名字。