StringBuilder 内部用了代理的技术实现, 是可变字符串的代理

.net设计模式实例之代理模式(Proxy Pattern)

一、代理模式简介(Brief Introduction)

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

二、解决的问题(What To Solve)

1、远程代理

远程代理,也就是为了一个对象在不同的地址空间提供局部代表。这样可隐藏一个对象存在于不同地址空间的事实,隐藏对象所在的地址空间。

比如.Net Web Service ,当一个项目在加入一个Web引用,引用Web Service的时候会在项 目中生成一个WebReference文件夹和响应的文件,这些文件夹和文件就是代理, 客户端在调 用此代理的时候实际上已经解决了远程访问的问题。

2、虚拟代理

虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对 象。这样可以达到最优化的性能。

比如浏览器使用代理模式优化网页下载,也就是首先展示网页文字,图片需要一张一张地 下载后才能看到。

3、安全代理

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

4、智能指引

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

三、代理模式分析(Analysis)1、代理模式结构

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();
     }
}

总结(Summary)

代理模式(Proxy Pattern)对其他对象提供一种代理以控制对这个对象的访问。代理模 式分为远程代理、虚拟代理、安全代理和智能指引。

C#设计模式之代理模式(一)

C#设计模式之代理模式(二)

copy on write,代理模式的更多相关文章

  1. js设计模式总结-代理模式

    代理模式 解决哪一类问题 从字面意思上理解,代理模式解决对一个对象的直接访问,这种直接访问可能是"不方便"的,所谓"不方便"可能是直接访问成本比较大(在前端领域 ...

  2. Objective-c 代理模式(delegate)

    Objective-c 代理模式(delegate) (2012-07-31 22:04:39) 转载▼ 标签: 杂谈 分类: iOS Objective-c 代理模式(delegate)     一 ...

  3. 代理模式(静态代理、JDK动态代理原理分析、CGLIB动态代理)

    代理模式 代理模式是设计模式之一,为一个对象提供一个替身或者占位符以控制对这个对象的访问,它给目标对象提供一个代理对象,由代理对象控制对目标对象的访问. 那么为什么要使用代理模式呢? 1.隔离,客户端 ...

  4. 设计模式 笔记 代理模式 Proxy

    //---------------------------15/04/21---------------------------- //Proxy 代理模式-----对象结构型模式 /* 1:意图: ...

  5. 设计模式之代理模式(Proxy Pattern)_远程代理解析

    一.什么是代理模式? 顾名思义,代理就是第三方,比如明星的经纪人,明星的事务都交给经纪人来处理,明星只要告诉经纪人去做什么,经纪人自然会想办法去做,做完之后再把结果告诉明星就好了 本来是调用者与被调用 ...

  6. Spring AOP 学习(一) 代理模式

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...

  7. 代理模式精讲(手写JDK动态代理)

    代理模式是一种架构型模式,表现出来就是一个类代表另一个类的功能,一般用在想对访问一个类的时候做一些控制,同时又不想影响正常的业务,这种代理模式在现实的生活中应用的也非常的广泛,我用穷举法给举几个好理解 ...

  8. Java设计模式——代理模式实现及原理

    简介 Java编程的目标是实现现实不能完成的,优化现实能够完成的,是一种虚拟技术.生活中的方方面面都可以虚拟到代码中.代理模式所讲的就是现实生活中的这么一个概念:中介. 代理模式的定义:给某一个对象提 ...

  9. Java的三种代理模式&完整源码分析

    Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCache缓存的实现机制](https://www.c ...

随机推荐

  1. Python接口自动化【requests处理Token请求】

    首先说一下使用python模拟登录或注册时,对于带token的页面怎么登录注册模拟的思路: 1.对于带token的页面,需要先从最开始的页面获取合法token 2.然后使用获取到的合法token进行后 ...

  2. java JDBC (八) 连接池 DBCP

    package cn.sasa.demo1; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSource; ...

  3. 八、自定义starter

    starter: 1.这个场景需要使用到的依赖是什么? 2.如何编写自动配置 @Configuration //指定这个类是一个配置类 @ConditionalOnXXX //在指定条件成立的情况下自 ...

  4. Ubuntu上qt环境的构建

    写在前面.......这个教程好像比较早一点了,现在介绍一个新的思路: 整体参见如下步骤(for zedboard): 1.首先下载qt-opensource-linux.run文件,然后跟在Wind ...

  5. dxCameraControl控件(拍照)

    拍照演示 主要属性设置 Active:True DeviceIndex:设备号,默认为0 其他方法 procedure Capture; //捕获 procedure Pause; //暂停 proc ...

  6. H3C 网管交换机快速配置指南(转)

    H3C交换机,5XXX,3XXX,还有部分2XXX系列都带有网管功能,可以帮助网络维护非常好的控制网络.基本的配置顺序: Console接口连接,开启Telnet登陆功能,Telnet后进行具体设置. ...

  7. js将字符串转换成json的三种方式

    1,js自带的eval函数,其中需要添加小括号eval('('+str+')'); function strToJson(str){ var json = eval('(' + str + ')'); ...

  8. Repository mirror 解析

    1 Repository(仓库) 1.1 Maven仓库主要有2种: remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问 local repository ...

  9. (转)EOSIO开发(三)钱包、账户与账户权限之概念篇

    这篇文章为大家介绍钱包(Wallet).账户(Accounts).账户权限(Account authorities)的概念. 钱包 Wallet 钱包是一个本地客户端软件,有下面两个作用: 保存私钥. ...

  10. python3 判断字符串是否为IP

    #!/usr/bin/python3 # -*- coding: utf-8 -*- import re ip = "192.168.1.1" ip = re.findall(&q ...