下面是追女孩子例子,A君与B君是好朋友,A君与女仔是同班同学,B君不认识女仔,B君就委托A君给女仔送礼物。下面是UML图:
interface IGiveGift
{
void GiveDolls();
void GiveFlowers();
void GiveChocolate();
}
class Pursuit:IGiveGift
{
SchoolGril sg;
public Pursuit(SchoolGril sg)
{
this.sg = sg;
}
public void GiveDolls()
{
Console.WriteLine(string.Format("送{0}洋娃娃", sg.Name));
}
public void GiveFlowers()
{
Console.WriteLine(string.Format("送{0}鲜花",sg.Name));
}
public void GiveChocolate()
{
Console.WriteLine(string.Format("送{0}巧克力", sg.Name));
}
}
class Proxy:IGiveGift
{
Pursuit p;
public Proxy(SchoolGril sg)
{
p = new Pursuit(sg);
}
public void GiveDolls()
{
p.GiveDolls();
}
public void GiveFlowers()
{
p.GiveFlowers();
}
public void GiveChocolate()
{
p.GiveChocolate();
}
}
public class SchoolGril
{
private string name;
public SchoolGril()
{
}
public string Name
{
get { return name; }
set { name = value; }
}
}
客户端代码:
SchoolGril sg = new SchoolGril();
sg.Name = "李娇娇";
Proxy p = new Proxy(sg);
p.GiveDolls();
p.GiveFlowers();
p.GiveChocolate();
P:为其他对象提供一种代理以控制对这个对象的访问。
代理种类:
1.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
2.虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
3.安全代理,用来控制真实对象访问时的权限。
4.智能指引,是指当调用真实的对象时,代理处理另外一些事。