代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。
例子:小明喜欢隔壁班的小美,想送礼物给小美。但是怕小美不收,小明就叫同寝室并且与小美一个班的小戴代替他送礼物给小美。
代理接口:
1 interface IGiveGift 2 { 3 void GiveDolls(); 4 void GiveFilowers(); 5 void GiveChocolate(); 6 }
被追求者:
1 class SchoolGirl 2 { 3 private string name; 4 public string Name { get; set; } 5 }
追求者:
1 class Pursuit:IGiveGift 2 { 3 SchoolGirl mm; 4 public Pursuit(SchoolGirl mm) 5 { 6 this.mm = mm; 7 } 8 public void GiveDolls() 9 { 10 Console.WriteLine(mm.Name + ",送你洋娃娃"); 11 } 12 13 public void GiveFilowers() 14 { 15 Console.WriteLine(mm.Name + ",送你鲜花"); 16 } 17 18 public void GiveChocolate() 19 { 20 Console.WriteLine(mm.Name + ",送你巧克力"); 21 } 22 }
代理者
1 class Proxy:IGiveGift 2 { 3 Pursuit gg; 4 public Proxy(SchoolGirl mm) 5 { 6 gg = new Pursuit(mm); 7 } 8 9 public void GiveDolls() 10 { 11 gg.GiveDolls(); 12 } 13 14 public void GiveFilowers() 15 { 16 gg.GiveFilowers(); 17 } 18 19 public void GiveChocolate() 20 { 21 gg.GiveChocolate(); 22 } 23 }
客户端
1 static void Main(string[] args) 2 { 3 SchoolGirl jiaojiao = new SchoolGirl(); 4 jiaojiao.Name = "小美"; 5 6 Proxy daill = new Proxy(jiaojiao); 7 8 daill.GiveDolls(); 9 daill.GiveFilowers(); 10 daill.GiveChocolate(); 11 12 Console.Read(); 13 }
效果:
代理模式结构图: