代理模式---proxy
代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
为其它对象提供一种代理以控制对目标对象的访问。即第三方对象通过访问代理对象而达到访问目标对象之目的,与此同时,代理对象在访问目标对象前后加入特定的逻辑以实现功能的扩展

??
interface IProxy
??? {
??????? string Function1();
??????? string Function2();
??? }
??? 远程对象实现:
??? /// <summary>
??? /// 模拟的远程对象
??? /// </summary>
??? public class LongDistanceClass:IProxy
??? {
??????? #region IProxy 成员
??????? public string Function1()
??????? {
??????????? //do someting
??????????? return "LongDistanceClass.Function1";
??????? }
??????? public string Function2()
??????? {
??????????? //do someting
??????????? return "LongDistanceClass.Function2";
??????? }
??????? #endregion
??? }
??? 接下来就要实现代理类型,使用代理对象访问模拟的远程对象,代理类型实现如下:
??? public class ProxyClass:IProxy
??? {
??????? #region IProxy 成员
??????? public string Function1()
??????? {
??????????? //to access LongDistanceClass.Function1
??????????? LongDistanceClass obj = new LongDistanceClass();
??????????? return obj.Function1();
??????? }
??????? public string Function2()
??????? {
??????????? //to access LongDistanceClass.Function2
??????????? LongDistanceClass obj = new LongDistanceClass();
??????????? return obj.Function2();
??????? }
??????? #endregion
??? }
?
??? 最后实现客户端代码:
??? class Class1
??? {
??????? [STAThread]
??????? static void Main(string[] args)
??????? {
??????????? IProxy pro = new ProxyClass();
??????????? Console.WriteLine(pro.Function1());
??????????? Console.WriteLine(pro.Function2());
??????????? Console.Read();
??????? }
??? }
??? 运行结果如下:
??? LongDistanceClass.Function1
LongDistanceClass.Function2
?
?
代理模式和装饰者模式上在语法形式上几乎完全一样,那么它们的区别在哪里呢?
装饰者模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活
代理模式:为其它对象提供一种代理以控制对这个对象的访问。
其实,它们的着重点一个在于“增加”职责,另一个在于“控制”访问。这是它们最本质的区别。
由此可以看到:学习设计模式重点在于“语义”上把握,而不是追求它的“形式。