设计模式-代理模式 C#版本
代理模式
在代理模式(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#版本相关推荐
- java设计模式代理模式_Java中的代理设计模式
java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...
- Python设计模式-代理模式
Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...
- Java设计模式(代理模式-模板方法模式-命令模式)
Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...
- 设计模式——代理模式
设计模式--代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能 ...
- 23种设计模式----------代理模式(一)
代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者 ...
- 第四章 Caché 设计模式 代理模式
文章目录 第四章 Caché 设计模式 代理模式 定义 类型 使用场景 优点 缺点 结构图 完整示例 抽象主题类 真实主题类 代理类 对象类 调用 思考 第四章 Caché 设计模式 代理模式 定义 ...
- Android常见设计模式——代理模式(Proxy Pattern)(二)
文章目录 1. 前言 2. 远程代理(Remote Proxy) 3. 后记 1. 前言 在上篇Android常见设计模式--代理模式(Proxy Pattern)中基本上知道了什么是代理模式,以及对 ...
- sheng的学习笔记-设计模式-代理模式
原理图: 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. 至少在以下集中情况下可以用 ...
- 设计模式-代理模式(Proxy Pattern)
设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...
最新文章
- Hadoop- Hadoop运维小计
- Python程序设计题解【蓝桥杯官网题库】 DAY9-基础练习
- xp和win 2003远程桌面强制进入命令_远程登录t人命令
- 在.NET Core下的机器学习--学习笔记
- 运维工程师必会的linux命令下载,运维工程师必会的109个Linux命令.pdf
- 市场营销分析--页面广告统计
- 硬件创业者们,如何避免掉到供应链的大坑里爬不出来
- PID算法 旋转倒立摆与平衡车的区别。此贴会更新。
- 搜狗拼音输入法漂亮皮肤 LeftSide 推荐下载
- Alex 的 Hadoop 菜鸟教程: 第3课 Hadoop 安装教程 - 非HA方式 (一台server)
- html加拼音注释,满江红岳飞全文带拼音(注释+译文)
- 如何做一个基于python电影院售票系统毕业设计毕设作品(Django框架)
- Python爬虫之抓取豆瓣影评数据
- 项目文档的流程图,ER图,用例图
- epiphone真伪
- 计算长方形或正方形的周长和面积
- 16.5 项目:向会员发送会费提醒电子邮件
- 2022-2028全球深海发电机控制器行业调研及趋势分析报告
- 服务器定时开机设置方法
- 第十六届智能车竞赛全国总决赛究竟该怎么举办讨论中的“混沌”现象
热门文章
- django报错:OperationalError: (1045, Access denied for user 'TEST'@'localhost' (using password: NO))
- qa158.cn kuais.php,qukuaigou.skhjcf.com
- Python将 Unicode 转换为 utf-8 格式
- 用事实说话,成熟的ORM性能不是瓶颈,灵活性不是问题:EF5.0、PDF.NET5.0、Dapper原理分析与测试手记(转)...
- Python pip自动管理脚本
- 使用matplotlib时报错:RuntimeWarning: Glyph 20998 missing from current font.
- Laxcus大数据管理系统2.0(11)- 第九章 容错
- 网络电话的优缺点你知道多少?
- 通达OA2019升级到V12的操作方法
- php kingcms 模型调用,KingCMS 中模板、模块、模型区别