首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

署理模式-proxy

2012-06-28 
代理模式---proxy代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。为其它对象提

代理模式---proxy

代理(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

?

?

代理模式和装饰者模式上在语法形式上几乎完全一样,那么它们的区别在哪里呢?
装饰者模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更加灵活
代理模式:为其它对象提供一种代理以控制对这个对象的访问。

其实,它们的着重点一个在于“增加”职责,另一个在于“控制”访问。这是它们最本质的区别。

由此可以看到:学习设计模式重点在于“语义”上把握,而不是追求它的“形式。

热点排行