我的理解:代理模式是 对另一个类打包。用新的接口来替换原有接口。同时添加一些新功能。如:权限功能、引用计数功能等。
原文:为其他对象提供一种代理,以便控制对这个对象的访问。
实例用了秀才委托小六向小郭送礼的逻辑。这里小六可以在送礼的同时做些什么。也可以对送出的礼物修改。
设计图如下:
代码如下:
class Program
{
public static void Run()
{
Gril gril = new Gril();
gril.Name = "小郭";
Boy boy = new Boy();
boy.Name = "秀才";
boy.SetGril("小郭");
Proxy p = new Proxy();
p.Name = "小六";
p.SetBoy(boy);
if (p.IsGril(gril.Name))
{
gril.收下礼物(p.送花());
gril.收下礼物(p.送巧克力());
gril.收下礼物(p.送口红());
}
gril.展示礼物();
}
}
class Person
{
protected string _name;
public string Name { get => _name; set => _name = value; }
}
class Gril : Person
{
private List<string> 礼物列表 = new List<string>();
public void 收下礼物(string 礼物)
{
礼物列表.Add(礼物);
}
public void 展示礼物()
{
Console.WriteLine(Name + "收到的礼物有:" + string.Join(" ", 礼物列表));
}
}
class Boy : Person
{
public string grilName;
public void SetGril(string g)
{
this.grilName = g;
}
public void 送礼()
{
Console.Write(Name + "送给" + this.grilName);
}
public void 求婚()
{
Console.Write(Name + "求婚" + this.grilName);
}
}
class Proxy : Person
{
private Boy boy;
public void SetBoy(Boy b)
{
this.boy = b;
}
public bool IsGril(string grilName)
{
return boy.grilName == grilName;
}
public string 送花()
{
Console.Write(Name + "执行:");
this.boy.送礼();
Console.Write(" ");
Console.WriteLine("鲜花");
return "鲜花";
}
public string 送巧克力()
{
Console.Write(Name + "执行:");
this.boy.送礼();
Console.Write(" ");
Console.WriteLine("巧克力");
return "巧克力";
}
public string 送口红()
{
Console.Write(Name + "执行:");
this.boy.送礼();
Console.Write(" ");
Console.WriteLine("口红");
return "口红";
}
}