c#设计模式之代理模式(Proxy Pattern)
引言
代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受到的其实就是火车站售票处的服务,同时我们还能够在代理点享受到火车站售票处没有的服务,例如代理点有个自动售货机,我们还能够享受到购物的服务.这就是代理的优势所在
在设计模式中也有那么一种模式,与代理这个定义紧密相连,下面我将以最简洁的代码展示它
/// <summary>
/// 业务抽象
/// </summary>
public interface ISubject
{
void GetTicket();
}
业务抽象
/// <summary>
/// 真正的逻辑对象
/// </summary>
public class RealSubject : ISubject
{
public void GetTicket()
{
Console.WriteLine(".....取票动作.....");
}
}
真实业务
/// <summary>
/// 真正业务对象的代理
/// </summary>
class ProxySubject:ISubject
{
private static ISubject _subject = null; void ProxySubject_Init()
{
if (_subject == null)
{
_subject = new RealSubject();
}
} public void GetTicket()
{
if (_subject == null)
{
ProxySubject_Init();
}
//AOP:日志,缓存,权限,延迟,异常
_subject.GetTicket();
}
}
代理业务
class Program
{
static void Main(string[] args)
{
var proxy = new ProxySubject();
proxy.GetTicket();
Console.ReadKey();
}
}
打印
观察上述代码我们发现它有以下特点
1上端调用的不是真实的业务对象,而是它的一个代理,真实的业务逻辑被隔离
2在代理之内,我们还能额外的定义其他的逻辑,而不影响真实的业务逻辑
这就是一个代理模式
当我们不想或不能直接调用一个业务逻辑对象,我们可以在它之上添加一个代理, 用来屏蔽具体的业务逻辑或者增加额外的业务
代理模式
因为代理本身就是一个比较简洁的思想,所以代理模式的类图也比较简单,如下:

代理模式中有三种角色:
主题的抽象角色(ISubject):真实主题和代理主题的抽象
真实的主题角色(RealSubject):真实主题,提供最根本的业务逻辑
主题的代理角色(ProxySubject):真实主题的代理,能够引用真实主题,同时添加一些额外的功能
注意:提供业务逻辑的是真实主题,而不是代理,代理只是起到引用的作用,同时可以增加一些额外的功能
相交装饰器模式
在设计模式里面,有一种设计模式叫做装饰器模式,它能够动态的为对象添加功能,
如果对这两种模式都有所了解的话,会发现他们其实有很多共同之处,同样都是具体对象与辅助对象依赖抽象的方式
例如,我们想为对象添加一个日志的功能:我们既可以选择为它添加一个代理来实现,也可以选择添加一个装饰器来实现,这个时候我们可能会迷惑,添加的到底是代理还是装饰器
对于它们的区别,从他们出发的场景来比较是最好的,从出发场景来看,装饰器模式注重的是对原有对象功能的扩展,而代理模式注重的是对原有对象的控制或屏蔽,个人觉得这是他们最大的区别
适用场景
当我们不想或不能直接调用一个业务逻辑对象,我们可以在它之上添加一个代理, 用来屏蔽具体的业务逻辑或者增加额外的业务
优点:
1降低了系统的耦合度,这是设计模式比较共通的优点;
2能够屏蔽真实的业务逻辑,同时还能额外增加功能
缺点
使用了代理模式,需要增加代理类,必然会增加系统的复杂程度
出自:博客园-半路独行
原文地址:https://www.cnblogs.com/banluduxing/p/9267705.html
本文出自于http://www.cnblogs.com/banluduxing 转载请注明出处。
c#设计模式之代理模式(Proxy Pattern)的更多相关文章
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)
原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...
- 二十四种设计模式:代理模式(Proxy Pattern)
代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...
- 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)【转】
介绍 为其他对象提供一个代理以控制对这个对象的访问. 示例 有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对象的访问. MessageModel ...
- 设计模式系列之代理模式(Proxy Pattern)——对象的间接访问
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释
代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...
- 代理模式(Proxy pattern)
代理模式(proxy pattern):作用:为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端对象和目标对象之间起中介的作用. 代理模式涉及到的角色: 抽象角色:声明真实对象和代理对象 ...
- 设计模式——代理模式(Proxy Pattern)
代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. UML图: 模型设计: Subject类: package com.cnblog.clarck; /** * Subject 类 ...
- 13.代理模式(Proxy Pattern)
using System; namespace Test { //抽象角色:声明真实对象和代理对象的共同接口. //代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象, //同时代理 ...
- 大熊君说说JS与设计模式之------代理模式Proxy
一,总体概要 1,笔者浅谈 当我们浏览网页时,网页中的图片有时不会立即展示出来,这就是通过虚拟代理来替代了真实的图片,而代理存储了真实图片的路径和尺寸,这就是代理方式的一种. 代理模式是比较有用途的一 ...
随机推荐
- 「小程序JAVA实战」小程序的举报功能开发(68)
转自:https://idig8.com/2018/09/25/xiaochengxujavashizhanxiaochengxudeweixinapicaidancaozuo66-2/ 通过点击举报 ...
- Spring NamedParameterJdbcTemplate 详解
转自: https://zmx.iteye.com/blog/373736 NamedParameterJdbcTemplate类是基于JdbcTemplate类,并对它进行了封装从而支持命名参数特性 ...
- Linux Tomcat 7.0 管理员登录时"401 Unauthorized" 问题解决方法
http://blog.csdn.net/u010359532/article/details/36055291 tomcat 7.0没有默认值,需要在conf的tomcat-users.xml中设置 ...
- Guidelines for Installing Oracle HR Sample Schemas
All scripts necessary to install sample schemas reside in $ORACLE_HOME/demo/schema directory. Before ...
- Spring Cloud Eureka高可用落地实战
一.原理 如图所示,多台Server端之间相互注册(这里以两台Server为例),Client端向所有的Server端注册. 二.Server端配置 1. 添加依赖 <dependency> ...
- 生产者消费者模式做一个golang的定时器
在主程序启动的时候开一个goroutine作为消费者,用管道连接生产者和消费者,消费者处于无限循环,从管道中获取channel传过来定时event 注意:channel在消费者创建的时候就连通生产者和 ...
- 307. Range Sum Query - Mutable查询求和的范围(可变)
[抄题]: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inc ...
- Wap版
Wap版:又叫h5.M版.移动网页版: Mobile:存储wap版调用的接口
- 拒绝枯燥,有意思的 Loading 页面动效设计
互联网时代,网络“提速”日益频繁,人们打开Web或软件的速度越来越快,一般页面缓冲和加载地过程也是几不可查.然而,在某些情况下,例如软件急需加载大量页面,首页急需加载大量内容,用户下载文件过大,甚至是 ...
- W-D-S-链接地址
1.程序一开始是烧写到nandflash上,设置为nandflash启动,6410片内有8K的内存,设为nandflash启动时,是从片内内存0地址开始,一上电,nandflash前面8K的内容会原原 ...