博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Net设计模式实例之代理模式(Proxy Pattern)
阅读量:5814 次
发布时间:2019-06-18

本文共 1309 字,大约阅读时间需要 4 分钟。

duction

代理模式(
Proxy Pattern
)对其他对象提供一种代理以控制对这个对象的访问。

、远程代理

远程代理,也就是为了一个对象在不同的地址空间提供局部代表。这样可隐藏一个对象存在与不同地质空间的事实,隐藏对象所在的地址空间。
比如
.Net Web Service ,
当一个项目在加入一个
Web
引用,引用
Web Service
的时候会在项目中生成一个
WebReference
文件夹和响应的文件,这些文件夹和文件就是代理, 
客户端在调用此代理的时候实际上已经解决了远程访问的问题。

、虚拟代理

虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样可以达到最优化的性能。
比如浏览器使用代理模式优化网页下载,也就是首先展示网页文字,图片需要一张一张地下载后才能看到。

、安全代理

安全代理,用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。

、智能指引

              
智能指引,是指当调用真实的对象时,代理处理另外一些事情。比如,在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它。也就是在访问一个对象时附加的一些内务处理。

、代理模式结构

       

、源代码

1
、抽象类
 Subject
public
 abstract class Subject
{
    public  abstract void
 Request();
}
 
2
、真实实体
RealSubject
 
继承于
Subject
public
 class RealSubject
:Subject
{
    public override void
 Request()
    
{
        Console
.WriteLine("
对象的真实实体方法在执行。"
);
    
}
}
 
3
、代理类
Proxy
 
继承于
Subject
类,同时引用
RealSubject
public
 class Proxy
:Subject
{
    private RealSubject
 realSubject;
    public override void
 Request()
    
{
        Console
.WriteLine("
通过代理类访问对象真实实体的方法。"
);
        if
 (realSubject == null
)
        
{
            
realSubject = new RealSubject
();
        
}
        
realSubject.Request();
    
}
}
 
4
、客户端代码
class
 Program
{
    static void Main
(string
[] args)
    
{
        Proxy
 proxy = new Proxy
();
        
proxy.Request();
        Console
.Read();
    
}
}

、程序运行结果

代理模式(
Proxy Pattern
)对其他对象提供一种代理以控制对这个对象的访问。代理模式分为远程代理、虚拟代理、安全代理和智能指引。
本文转自 灵动生活 51CTO博客,原文链接:http://blog.51cto.com/smartlife/269308,如需转载请自行联系原作者
你可能感兴趣的文章
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>
Angular2, NativeScript 和 React Native比较[翻译]
查看>>
论模式在领域驱动设计中的重要性
查看>>
国内首例:飞步无人卡车携手中国邮政、德邦投入日常运营
查看>>
微软将停止对 IE 8、9和10的支持
查看>>
微服务架构会和分布式单体架构高度重合吗
查看>>
如何测试ASP.NET Core Web API
查看>>
《The Age of Surge》作者访谈
查看>>
测试人员的GitHub
查看>>
Spring Web Services 3.0.4.RELEASE和2.4.3.RELEASE发布
查看>>
有关GitHub仓库分支的几个问题
查看>>
无服务器计算的黑暗面:程序移植没那么容易
查看>>
云原生的浪潮下,为什么运维人员适合学习Go语言?
查看>>
Webpack入门教程三十
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Kali linux virtualbox rc=1908 错误解决办法
查看>>
linux软件包管理之三(源代码安装)
查看>>
数据库三范式是什么?
查看>>
[转载]设置Ubuntu自动连接无线,无须再输入密钥环和无线密码
查看>>