1.代理模式介绍

  在软件开发中有时会遇到不能直接使用对象的问题,如我们要使用的对象在进程外,甚至在远程的机器上,但是我们要使用这个对象的功能怎么办呢?代理模式就可以用来解决这个问题。举一个生活中的例子:一个害羞男孩追求一个叫如花的女孩,但是自己不敢送礼物,就找了一个朋友代理他给如花送礼物。就以这个例子介绍代理模式的角色:

  抽象主题角色:定义了真实主题和代理主题的公共接口,害羞男孩和他的朋友都有给如花送礼物的功能

  代理主题角色:害羞男孩的朋友,我们代码中直接使用的对象,通过代理对象我们可以调用真实对象的功能

  真实主题角色:害羞男孩,我们真正要使用的对象

代理模式也经常用于对对象的访问做一些控制,如男孩的朋友比较热心,送礼物前会先判断如花是不是个好人,如果如花不是个好人他就不替害羞男孩送礼物给如花了。

代码实现

    /// <summary>
/// 送礼物的人 (抽象主题角色)
/// </summary>
public abstract class GiveGiftPerson
{
//送礼物功能
public abstract void GiveGift();
} /// <summary>
/// 害羞男孩 (真实主题角色)
/// </summary>
public class ShyBoy : GiveGiftPerson
{
public override void GiveGift()
{
Console.WriteLine("害羞男孩送礼物给如花~~");
}
} /// <summary>
/// 害羞男孩的朋友(代理主题角色)
/// </summary>
public class Friend : GiveGiftPerson
{
//引用真实主题实例
ShyBoy shyboy = new ShyBoy();
public override void GiveGift()
{
//朋友一顿分析后,觉得如花是个好人
bool IsRuhuaGood = true;
if (IsRuhuaGood)
{
//调用真实主题的方法
shyboy.GiveGift();
}
}
}

客户端调用:

    class Program
{
static void Main(string[] args)
{
//因为不能直接访问到真实对象所以我们不能直接new ShyBoy()去送礼物。 //代码中使用的是代理对象
Friend friend = new Friend();
friend.GiveGift();
Console.ReadKey();
}
}

程序运行如下:

2.小结

上边例子的类图

代理模式的使用场景:

  当我们不能直接访问所需类,或者我们想对类的访问做一些控制时使用。WCF是代理模式的典型应用。

 代理模式的优点:

  职责清晰,扩展性好,很方便对类的访问进行控制

代理模式的缺点:

  在客户端和真实主题间加了代理对象,可能造成处理请求的速度变慢。

C#设计模式(9)——代理模式的更多相关文章

  1. C#设计模式(13)——代理模式(Proxy Pattern)

    一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让代 ...

  2. 乐在其中设计模式(C#) - 代理模式(Proxy Pattern)

    原文:乐在其中设计模式(C#) - 代理模式(Proxy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 代理模式(Proxy Pattern) 作者:webabcd 介绍 为 ...

  3. Java设计模式之代理模式(静态代理和JDK、CGLib动态代理)以及应用场景

    我做了个例子 ,需要可以下载源码:代理模式 1.前言: Spring 的AOP 面向切面编程,是通过动态代理实现的, 由两部分组成:(a) 如果有接口的话 通过 JDK 接口级别的代理 (b) 如果没 ...

  4. 设计模式之代理模式之二(Proxy)

    from://http://www.cnblogs.com/xwdreamer/archive/2012/05/23/2515306.html 设计模式之代理模式之二(Proxy)   0.前言 在前 ...

  5. 夜话JAVA设计模式之代理模式(Proxy)

    代理模式定义:为另一个对象提供一个替身或者占位符以控制对这个对象的访问.---<Head First 设计模式> 代理模式换句话说就是给某一个对象创建一个代理对象,由这个代理对象控制对原对 ...

  6. GOF23设计模式之代理模式

    GOF23设计模式之代理模式 核心作用:通过代理,控制对对象的访问.可以详细控制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理(即:AOP的微观实现) AOP(Asp ...

  7. C#设计模式:代理模式(Proxy Pattern)

    一,什么是C#设计模式? 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 二,代码如下: using System; using System.Collectio ...

  8. js设计模式——1.代理模式

    js设计模式——1.代理模式 以下是代码示例 /*js设计模式——代理模式*/ class ReadImg { constructor(fileName) { this.fileName = file ...

  9. java设计模式6——代理模式

    java设计模式6--代理模式 1.代理模式介绍: 1.1.为什么要学习代理模式?因为这就是Spring Aop的底层!(SpringAop 和 SpringMvc) 1.2.代理模式的分类: 静态代 ...

  10. php设计模式 Proxy (代理模式)

    代理,指的就是一个角色代表另一个角色采取行动,就象生活中,一个红酒厂商,是不会直接把红酒零售客户的,都是通过代理来完成他的销售业务.而客户,也不用为了喝红酒而到处找工厂,他只要找到厂商在当地的代理就行 ...

随机推荐

  1. windows 环境下通过运行快速启动程序

    在windows环境下,我们可以使用一些系统内置的快捷键来快速启动我们想要的应用程序,我这里举例几个我经常使用的,比如: 快捷键 功能说明 services.msc  查看系统服务 gpedit.ms ...

  2. codevs 2606 约数和问题 (数学+分块)

    题目描述 Description Smart最近沉迷于对约数的研究中. 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X) ...

  3. python学习日记(装饰器的补充)

    如何返回被装饰函数的函数名及注释? 问题及实现 先看典型的装饰器: def wrapper(f):#装饰器函数,f是被装饰函数 def inner(*args,**kwargs): '''执行函数之前 ...

  4. ARC 086 E - Smuggling Marbles(dp + 启发式合并)

    题意 Sunke 有一棵 \(N + 1\) 个点的树,其中 \(0\) 为根,每个点上有 \(0\) 或 \(1\) 个石子, Sunke 会不停的进行如下操作直至整棵树没有石子 : 把 \(0\) ...

  5. emwin之2D图形流位图显示的方法

    @2018-10-31 [需求] 界面上绘制状态指示图标 [方法] --① 方法一 外部存储介质上的图标读写与显示 i  . 将要显示的图标使用官方软件<BmpCvt.exe>转换成 &q ...

  6. 【原创】【状态压缩DP】POJ3254 Corn Fields【新手向】

    一开始根本不会状压dp,上网各种找题解,但发现他们写的都很......反正我作为一个没有接触过状态压缩的,根本看不懂! 然后看了好多状态压缩的题的题解,总结了一下思路,思路很重要,有了思路转换成计算机 ...

  7. LOJ6089 小Y的背包计数问题(根号优化背包)

    Solutioon 这道题利用根号分治可以把复杂度降到n根号n级别. 我们发现当物品体积大与根号n时,就是一个完全背包,换句话说就是没有了个数限制. 进一步我们发现,这个背包最多只能放根号n个物品. ...

  8. Jarvis OJ [XMAN]level1 write up

    首先 老规矩,把软件拖到Ubuntu里checksec一下文件 然后知道了软件位数就放到IDA32里面... 熟悉的函数名... 缘真的妙不可言... 然后看了下vulnerable_function ...

  9. hdu 1238 Substrings(kmp+暴力枚举)

    Problem Description You are given a number of case-sensitive strings of alphabetic characters, find ...

  10. js jquery radio 选中 选中值

    radio示例: <label><input type="radio" name="type" id="type" val ...