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

  在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

  代理模式的优点:

  (1)、职责清晰,真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。
  (2)、代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的作用。
  (3)、高扩展性

  代理模式的UML图:

      

    代码示例:

namespace ConsoleApplication1
{
abstract class Subject
{
public abstract void Request();
} class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("真实的请求!");
}
} //代理类
class Proxy : Subject
{
RealSubject realSubject; //用于装载真实对象
public override void Request()
{
if (realSubject == null)
{
realSubject = new RealSubject(); //获得真实对象
}
realSubject.Request(); //调用真实对象的请求方法
}
} class Program
{
static void Main(string[] args)
{
Proxy proxy = new Proxy();
proxy.Request(); //输出真实的请求 Console.ReadKey();
}
}
}

  从代码来看,代理模式的思想是很简单的,难度应该在怎么灵活应用上。

namespace 代理模式
{
class Program
{
static void Main(string[] args)
{
小夫 proxy = new 小夫();
proxy.Hit(); //输出真实的请求 Console.ReadKey();
}
} abstract class Subject
{
public abstract void Hit();
} class 胖虎 : Subject
{
public override void Hit()
{
Console.WriteLine("揍大雄!"); //Type t = this.GetType();
//Console.WriteLine("揍大雄的人是:" + t.Name);
}
} //代理类
class 小夫 : Subject
{
胖虎 realSubject; //把胖虎放到小夫家
public override void Hit()
{
if (realSubject == null)
{
realSubject = new 胖虎(); //胖虎来了
}
realSubject.Hit(); //让胖虎揍大雄
}
}
}

  

  典型的应用场景是,当真正的处理类不方便使用时,就可以使用代理模式。

  1. 远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。
  2. 虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
  3. 安全代理,用来控制真实对象的访问权限,例如上面的代理类没有送巧克力,这样送巧克力的权限就没有了。
  4. 智能指引,是指当调用真实的对象时,代理处理另外一些事。
 
 
分类: 设计模式
 
0
0
 
(请您对文章做出评价)
 

代理模式 - OK的更多相关文章

  1. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  2. 23种设计模式--代理模式-Proxy

    一.代理模式的介绍       代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称"百晓生",在平时得开发中我们经常会听到 ...

  3. Spring代理模式及AOP基本术语

    一.代理模式: 静态代理.动态代理 动态代理和静态代理区别?? 解析:静态代理需要手工编写代理类,代理类引用被代理对象. 动态代理是在内存中构建的,不需要手动编写代理类 代理的目的:是为了在原有的方法 ...

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

    前言: 最近在研究Retrofit开源框架的时候,其主要核心代码是通过注解标示参数,动态代理模式实现具体接口,反射机制进行参数解析,最终实现发送请求.其实之前在学习Xutils源码的时候,Xutils ...

  5. 设计模式(十三):从“FQ”中来认识代理模式(Proxy Pattern)

    我们知道Google早就被墙了,所以FQ才能访问Google呢,这个“FQ”的过程就是一个代理的过程.“代理模式”在之前的博客中不止一次的提及过,之前的委托回调就是代理模式的具体应用.今天我们就从“F ...

  6. 设计模式(十三)代理模式(Proxy Pattern)

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

  7. php实现设计模式之代理模式

    <?php /* * 代理模式 * 为其他对象提供一种代理以控制对这个对象的访问. * 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用 ...

  8. PHP 代理模式

    代理模式:为其他对象提供一种代理以控制对这个对象的访问. [代理模式中主要角色] 抽象主题角色:声明了代理主题和真实主题的公共接口,使任何需要真实主题的地方都能用代理主题代替. 代理主题角色:含有真实 ...

  9. java代理模式之静态代理

    作为一个初级开发者,可能不会接触到代理模式,但是在很多框架的使用中都不知不觉使用了代理模式,比如servlet的过滤器链,spring的AOP,以及spring mvc的拦截器等.所以了解代理模式对于 ...

  10. 设计模式-代理模式(Proxy Model)

    文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/5988145.html 目录 1.写在前面 2.概述 3.目的 4.结构组成 5.实现 5 ...

随机推荐

  1. android实现类似于支付宝余额快速闪动的效果

    效果如下:   此图片不会动,但实际上是会快速跳动的.  之前看到有支付宝的效果非常牛逼.就是进去看到余额呼噜噜的直接上蹿下跳到具体数字,效果帅,但不知道怎么实现,最近终于知道了. 思路: 首先经常用 ...

  2. android 在EditText中显示表情图片

    public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { su ...

  3. v4l2采集视频和图片源码

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h&g ...

  4. bat文件调用shutdown命令不生效问题原因

    背景: 本人使用云桌面办公,但是用于登陆云桌面的终端运行卡顿,每次开机要20min才能登陆云桌面,所以: 1)在BIOS设置了定时开关,让终端提前开机 2)在系统上层,开机启动项增加一个bat文件(s ...

  5. android 解析json数据格式

    json数据格式解析我自己分为两种: 一种是普通的,一种是带有数组形式的: 普通形式的:服务器端返回的json数据格式如下: {"userbean":{"Uid" ...

  6. DFBle.swift

    ////  DFBle.swift//  DFBle////  Created by LeeYaping on 15/9/2.//  Copyright (c) 2015年 lisper. All r ...

  7. Windows server 2008系统下FTP服务器的安装

    一.在 Windows 服务器上安装 FTP 服务 1. 在"开始"菜单上,单击"管理工具",然后单击"服务器管理器". 2. 在" ...

  8. 自定义控件 带描边的TextView

    使用 public class MainActivity extends Activity {     @Override     protected void onCreate(Bundle sav ...

  9. 整理:C#写ActiveX, 从代码到打包到签名到发布的示例

    对于不懂C++和VB的我, 在工作上却遇到需要重写旧ActiveX控件的任务. 好在客户机都是Windows PC, 基本上都有.net framework 2.0, 勉强用C#实现可以满足需求 所以 ...

  10. css圆角

    在CSS3中圆角属性,有四个.三个.两个和一个值. 四个值: 第一个值为左上角,第二个值为右上角,第三个值为右下角,第四个值为左下角.