您的位置:首页 > 其它

解读设计模式----代理模式(Proxy Pattern),从买电脑的那些事儿说起

2008-07-23 00:36 295 查看
一、说买电脑的那些事

我之前一直用的是台式机,可总感觉不方便,特别是携带,就拿租房子后搬家来说吧,费了不少劲。种种原因有了想换笔记本的想法。 5.1假期和一个好朋友特到电脑城去逛了一圈,一进电脑城便见:“HP笔记本XX总代理、IBM笔记本专卖、XX电脑YY总代理......”。

看了很多家销售店,给我印象最深的就是到处都是XX牌电脑专卖和代理商,就在同一层楼里我就见着同一牌子有6家代理销售商铺。呵呵,看来我们买电脑就直接找销售代理商就可以,没必要在找生产厂商了,厂商生产出电脑后就是要把产品推向市场销售出去,而代理商在此过程中就代替生产商销售产品。这让我想起了面向对象的设计模式--代理(Proxy)模式

二、谈代理(Proxy)模式

1、代理模式的意图:

为其他对象提供一种代理以控制对这个对象的访问。

就以电脑销售代理商来说,他就负责提供一种代理,以控制对电脑制造商销售电脑的方法。

2、代理模式UML图(下图选自http://www.dofactory.com/):

//电脑代理商销售电脑的方法,当客户在买电脑的时候就调用此方

2//法销售电脑,此时就需要去实例化ComputerMaker对象。

3public void SaleComputer()

4ComputerMaker cm = null;
主题代理角色在向真实主题角色转发请求实际也就是通过他所持有的真实主题角色的引用去调用真实主题角色的方法,如

下:
1if(cm==null)

2cm.SaleComputer();
7、模式效果

--代理模式在访问对象时引入了一定程度的间接性。

在我们买电脑的过程中,我们找电脑销售代理商买电脑,调用其销售电脑的方法,而实际是间接的调用了电脑制造商的

销售电脑方法。

三、电脑销售代理程序

namespace DesignPattern.Proxy.Computer

2namespace DesignPattern.Proxy.Computer

2namespace DesignPattern.Proxy.Computer

2namespace DesignPattern.Proxy

2{

3{

5{

7 Computer#region Computer

8 Console.WriteLine("--制造商销售电脑--");

9 Computer.Computer sc = new ComputerMaker();

10 sc.SaleComputer();

11

12 Console.WriteLine();

13 Console.WriteLine("--代理商销售电脑--");

14 sc = new ComputerProxy();

15 sc.SaleComputer();

16 #endregion

17 }

18 }

19}
四、代理(Proxy)模式大观园:

当我们去操作或控制一个对象时,如果该对象处于某种原因不能被调用方直接控制或操作,Proxy模式就该出场了。Proxy模式中的“代理”代表了被代理对象的权利和义务。而这种义务不同于法律文件规定的义务,而是设计者通过一定的设计方式,例如继承或者聚合的方式来获得的。

虽然我们的设计模式开山老祖GOF在其经典著作《设计模式》一书中阐明,Proxy模式的意图是“为其他对象提供一种代理以控制对这个对象的访问。”描述一目了然,但实际的应用方式,却需要在项目中去体现。

Proxy模式的应用非常广泛,还包括远程代理,智能代理......等。虽然实现方式不一样,但其中的原理却是相同的,要理解Proxy模式,只要明白“代理”二字的含义就可以一目了然了。----选自《软件设计精要与模式》

五、其他相关模式

Adapter:适配器(Adapter)模式为它所适配的对象提供一个 不同的接口。相反,代理模式提供了与它的实体相同的接口。然而,用于访问保护的代理可能会拒绝执行实体会执行的操作,因此,它的接口实际上可能只是实体接口的一个子集。--选自《设计模式--可复用面向对象软件基础》

六、参考文献

《设计模式--可复用面向对象软件基础》

《软件设计精要与模式》
http://www.dofactory.com/
转载请注明出处:http://beniao.cnblogs.com/http://www.cnblogs.com/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: