代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。

在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。

介绍

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

主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

何时使用:想在访问一个类时做一些控制。

如何解决:增加中间层。

关键代码:实现与被代理类组合。

应用实例: 1、Windows 里面的快捷方式。 2、猪八戒去找高翠兰结果是孙悟空变的,可以这样理解:把高翠兰的外貌抽象出来,高翠兰本人和孙悟空都实现了这个接口,猪八戒访问高翠兰的时候看不出来这个是孙悟空,所以说孙悟空是高翠兰代理类。 3、买火车票不一定在火车站买,也可以去代售点。 4、一张支票或银行存单是账户中资金的代理。支票在市场交易中用来代替现金,并提供对签发人账号上资金的控制。 5、spring aop。

优点: 1、职责清晰。 2、高扩展性。 3、智能化。

缺点: 1、由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。 2、实现代理模式需要额外的工作,有些代理模式的实现非常复杂。

使用场景:按职责来划分,通常有以下使用场景: 1、远程代理。 2、虚拟代理。 3、Copy-on-Write 代理。 4、保护(Protect or Access)代理。 5、Cache代理。 6、防火墙(Firewall)代理。 7、同步化(Synchronization)代理。 8、智能引用(Smart Reference)代理。

注意事项: 1、和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。 2、和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。

实现

我们将创建一个 Image 接口和实现了 Image 接口的实体类。ProxyImage 是一个代理类,减少 RealImage 对象加载的内存占用。

ProxyPatternDemo 类使用 ProxyImage 来获取要加载的 Image 对象,并按照需求进行显示。

1.创建一个接口。

   public interface Image{void display();}

2.创建实现接口的实体类。

    public class RealImage : Image{private String fileName;public RealImage(String fileName){this.fileName = fileName;loadFromDisk(fileName);}public void display(){Console.WriteLine("Displaying " + fileName);}private void loadFromDisk(String fileName){Console.WriteLine("Loading " + fileName);}}
   public class ProxyImage : Image{private RealImage realImage;private String fileName;public ProxyImage(String fileName){this.fileName = fileName;}public void display(){if (realImage == null){realImage = new RealImage(fileName);}realImage.display();}}

3.当被请求时,使用 ProxyImage 来获取 RealImage 类的对象。

// See https://aka.ms/new-console-template for more information
using ProxyPattern;Image image = new ProxyImage("test_10mb.jpg");// 图像将从磁盘加载
image.display();
Console.WriteLine("");
// 图像不需要从磁盘加载
image.display();Console.ReadLine();

4.执行程序,输出结果:

设计模式-代理模式 C#版本相关推荐

  1. java设计模式代理模式_Java中的代理设计模式

    java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...

  2. Python设计模式-代理模式

    Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...

  3. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

  4. 设计模式——代理模式

    设计模式--代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能 ...

  5. 23种设计模式----------代理模式(一)

    代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者 ...

  6. 第四章 Caché 设计模式 代理模式

    文章目录 第四章 Caché 设计模式 代理模式 定义 类型 使用场景 优点 缺点 结构图 完整示例 抽象主题类 真实主题类 代理类 对象类 调用 思考 第四章 Caché 设计模式 代理模式 定义 ...

  7. Android常见设计模式——代理模式(Proxy Pattern)(二)

    文章目录 1. 前言 2. 远程代理(Remote Proxy) 3. 后记 1. 前言 在上篇Android常见设计模式--代理模式(Proxy Pattern)中基本上知道了什么是代理模式,以及对 ...

  8. sheng的学习笔记-设计模式-代理模式

    原理图: 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. 至少在以下集中情况下可以用 ...

  9. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

最新文章

  1. Hadoop- Hadoop运维小计
  2. Python程序设计题解【蓝桥杯官网题库】 DAY9-基础练习
  3. xp和win 2003远程桌面强制进入命令_远程登录t人命令
  4. 在.NET Core下的机器学习--学习笔记
  5. 运维工程师必会的linux命令下载,运维工程师必会的109个Linux命令.pdf
  6. 市场营销分析--页面广告统计
  7. 硬件创业者们,如何避免掉到供应链的大坑里爬不出来
  8. PID算法 旋转倒立摆与平衡车的区别。此贴会更新。
  9. 搜狗拼音输入法漂亮皮肤 LeftSide 推荐下载
  10. Alex 的 Hadoop 菜鸟教程: 第3课 Hadoop 安装教程 - 非HA方式 (一台server)
  11. html加拼音注释,满江红岳飞全文带拼音(注释+译文)
  12. 如何做一个基于python电影院售票系统毕业设计毕设作品(Django框架)
  13. Python爬虫之抓取豆瓣影评数据
  14. 项目文档的流程图,ER图,用例图
  15. epiphone真伪
  16. 计算长方形或正方形的周长和面积
  17. 16.5 项目:向会员发送会费提醒电子邮件
  18. 2022-2028全球深海发电机控制器行业调研及趋势分析报告
  19. 服务器定时开机设置方法
  20. 第十六届智能车竞赛全国总决赛究竟该怎么举办讨论中的“混沌”现象

热门文章

  1. django报错:OperationalError: (1045, Access denied for user 'TEST'@'localhost' (using password: NO))
  2. qa158.cn kuais.php,qukuaigou.skhjcf.com
  3. Python将 Unicode 转换为 utf-8 格式
  4. 用事实说话,成熟的ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记(转)...
  5. Python pip自动管理脚本
  6. 使用matplotlib时报错:RuntimeWarning: Glyph 20998 missing from current font.
  7. Laxcus大数据管理系统2.0(11)- 第九章 容错
  8. 网络电话的优缺点你知道多少?
  9. 通达OA2019升级到V12的操作方法
  10. php kingcms 模型调用,KingCMS 中模板、模块、模型区别