设计模式(6):代理模式
代理模式的主要作用是为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式的思想是为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象。这些额外的操作通常需要与实际对象进行通信。
以下代码来自《大话模式》一书。
IGiveGift
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Proxy { interface IGiveGift { void GiveDolls(); void GiveFlowers(); void GiveChocolate(); } }
SchoolGirls:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Proxy 7 { 8 class SchoolGirl 9 { 10 private string _name; 11 public string Name 12 { 13 set { _name = value; } 14 get { return _name; } 15 } 16 } 17 }
Pursuit
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Proxy { class Pursuit:IGiveGift { private SchoolGirl _mm; public Pursuit(SchoolGirl mm) { _mm = mm; } public void GiveDolls() { Console.WriteLine(_mm.Name+"送你洋娃娃"); } public void GiveFlowers() { Console.WriteLine(_mm.Name+"送你鲜花"); } public void GiveChocolate() { Console.WriteLine(_mm.Name+"送你巧克力"); } } }
Proxy
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Proxy { class Proxy:IGiveGift { private 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(); } } }
Program
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Proxy { class Program { static void Main(string[] args) { SchoolGirl z = new SchoolGirl(); z.Name = "Flowerowl"; Proxy proxy = new Proxy(z); proxy.GiveDolls(); proxy.GiveFlowers(); proxy.GiveChocolate(); Console.ReadLine(); } } }