电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

老生常谈:代理模式


发布日期:2018/6/6
 
在上一篇你会在C#的类库中添加web service吗? 我谈到了web service的应用本人一直学习设计模式而web service就是代理模式的一种特别经典的应用

名词解释

代理代理服务器即Proxy服务器在互联网上的完成跑腿服务当你在浏览器中设置了某个Proxy服务器之后由你的浏览器所发出的任何要求都会被送到Proxy服务器上去由这台Proxy服务器代为处理

现实中真实例子:

在工厂和销售商之间也是这种类似的代理关系工厂所生产的产品要想销售出去首先必须要有客户但是工厂是不希望这样的直接客户直接到工厂来买产品原因可想而之我这里列了几项

第一工厂并没有那么多时间去接待数量众多的客户

第二工厂并不一定具有一个非常出色销售团队

这样工厂就非常希望找到一个代理来帮工厂完成销售任务工厂把产品交给代理代理负责打广告销售售后服务等等在电脑城中当我们diy电脑的时候商家会到不同的硬件代理商那边去拿相关的配件例如inter的cpu电脑城中有很多商家做为intel的代理他们都卖intel的cpu代理商负责销售cpu 发放质保卡等在某种程度上来说代理就代表了intel(部分权利)

代理商和工厂之间有一个共同的特点他们都拥有intel的cpu他们之间的利润成正比说的抽象点就是他们之间具备共同的接口客户可以和代理商沟通特殊情况下可以直接和工厂沟通例如代理商找不到了产品坏了此时要修这时就要直接访问工厂了说的抽象点就是客户端可以通过代理来访问真实的类也可以通过代理直接访问真实类

这样就非常清晰的显示出代理模式的结构元素

抽象角色代理和真实类共同接口

真实角色代理角色所代表的真实对象

: 代理角色它的内部含真实角色的引用它可以访问真实角色中的任何公有方法

代理模式的类图:

代理模式的作用

在某些情况下客户不想或者不能够直接引用一个对象而代理对象可以在客户端和目标对象之间起到中介的作用例如在web application中添加web service此时就会生成一个代理这个代理负责访问远程服务生成真实代理对象借助客户端调用

web service生成代码如下:SettingsDesignercs从中可以看出它完成了连接远程服务的功能至于详细的原理本人不才望各位指点

//

//<autogenerated>

//此代码由工具生成

//运行库版本:

//

//对此文件的更改可能会导致不正确的行为并且如果

//重新生成代码这些更改将会丢失

//</autogenerated>

//

namespaceMyWebServiceWebProperties{

[global::SystemRuntimeCompilerServicesCompilerGeneratedAttribute()]

[global::SystemCodeDomCompilerGeneratedCodeAttribute(MicrosoftVisualStudioEditorsSettingsDesignerSettingsSingleFileGenerator)]

internalsealedpartialclassSettings:global::SystemConfigurationApplicationSettingsBase{

privatestaticSettingsdefaultInstance=((Settings)(global::SystemConfigurationApplicationSettingsBaseSynchronized(newSettings())));

publicstaticSettingsDefault{

get{

returndefaultInstance;

}

}

[global::SystemConfigurationApplicationScopedSettingAttribute()]

[global::SystemDiagnosticsDebuggerNonUserCodeAttribute()]

[global::SystemConfigurationSpecialSettingAttribute(global::SystemConfigurationSpecialSettingWebServiceUrl)]

[global::SystemConfigurationDefaultSettingValueAttribute()]

publicstringMyWebService_Web_localhost_Service{

get{

return((string)(this[MyWebService_Web_localhost_Service]));

}

}

}

}

代理模式在众多模式中都非常眼熟在adapter中也有引用对象的存在在Decorator中也有引用对象它们的共同特点都是一个类包含另一个类的引用可以通过它访问被引用对象所有公有方法但是它们之间又存在不同点无论是adaoter模式还是decoraor模式它们存在引用类之间都不必拥有共同的接口它们之间可以是完成不相关的对象

代理模式中的代理对象和真实对象之间无论访问谁最终访问的是同一对象即真实对象它们之间并没有发生质的变化

:adapter模式中存在的引用是在一个类中引用另一个类中的方法使其方法签名发生变化是外表变了本质没变

decorator中存在的引用是在旧类的基础了增加新的功能

上一篇:正则表达式语法及实例整理

下一篇:WCF通信简单示例