代理模式的参与者有:一个约束、一个代理者、一个被代理者、一个调用者

代理模式的实现很简单;还是那个房子,对于开门这个操作,我更换了一个远程解锁的门,那么我就可以通过这个远程连接的服务器远程解锁,这样我家里人没带钥匙,我也可以远程解锁了,而且不需要钥匙,甚至完全不需要知道锁的存在,我代码实现一下

    /// <summary>
/// 抽象接口 用来进行约束
/// </summary>
public interface IAccess
{
void Access();
}
/// <summary>
/// 用户类
/// </summary>
public class Room : IAccess
{
/// <summary>
/// 进入房子操作
/// </summary>
public void Access()
{
Console.WriteLine("进房子了");
}
}
/// <summary>
/// 远程开门类
/// </summary>
public class RemoteDoor : IAccess
{
private Room room = new Room();
/// <summary>
///
/// </summary>
public void Access()
{
room.Access();
}
}

这样我就可以通过调用

RemoteDoor类的Access()方法来间接调用Room类的Access()方法了,这种实现看起来很鸡肋哈,我为什么不直接调用Room类的方法呢,非要绕一层,这不是有病吗?
刚开始我也这么想来着,但是仔细一想,如果我们不想要调用者知道有Room这个类,或者说,这个类我不希望调用者能直接访问这个类,那这个代理模式的好处就凸显出来了;
好处: 1、隐藏了对象的位置,在对象的引入有了一定的间接性;
   2、可以提供一种copy-on-write(写时复制)的优化方式,没用过,准备找个时间仔细了解一下再说。
   3、可以进行一些类似AOP的操作,比如计数之类的非主线业务需求

看完代理模式之后感觉代理模式和装饰器模式好像啊,但是这两者还是有区别的,
区别:1、代理模式无需实例化真正业务对象,只需要实例化代理者的对象即可,对于调用者而言,真正的业务对象是不可知的;而装饰器模式需要实例化真正的业务对象,然后通过装饰者的构造函数参数传递这个对象,在运行时递归的被构造,此时业务对象是明朗的;
   2、关注点不一样,代理模式关注的是控制对真正业务对象的访问,装饰器模式关注的是在一个对象上动态的添加方法。

设计模式(四)——代理模式(Proxy)的更多相关文章

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

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

  2. 二十四种设计模式:代理模式(Proxy Pattern)

    代理模式(Proxy Pattern) 介绍为其他对象提供一个代理以控制对这个对象的访问. 示例有一个Message实体类,某对象对它的操作有Insert()和Get()方法,用一个代理来控制对这个对 ...

  3. 大熊君说说JS与设计模式之------代理模式Proxy

    一,总体概要 1,笔者浅谈 当我们浏览网页时,网页中的图片有时不会立即展示出来,这就是通过虚拟代理来替代了真实的图片,而代理存储了真实图片的路径和尺寸,这就是代理方式的一种. 代理模式是比较有用途的一 ...

  4. [设计模式] 12 代理模式 proxy

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对代理模式是这样说的:为其他对象提供一种代理以控制对这个对象的访问.结合上面的游戏代理的例子和下面的图,我们来进行分析一下.以前你是这 ...

  5. Java基础-设计模式之-代理模式Proxy

    代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理 ...

  6. 设计模式三: 代理模式(Proxy) -- JDK的实现方式

    简介 代理模式属于行为型模式的一种, 控制对其他对象的访问, 起到中介作用. 代理模式核心角色: 真实角色,代理角色; 按实现方式不同分为静态代理和动态代理两种; 意图 控制对其它对象的访问. 类图 ...

  7. c#设计模式之代理模式(Proxy Pattern)

    引言 代理这个词语,大家在现实世界已经频繁的接触过,例如火车站代理售票点,因为这些代理售票点的存在,我们不必要去火车站的售票处就可以查询或者取到火车票.代理点本身是没有能力生产车票的,我们在代理处享受 ...

  8. 设计模式 笔记 代理模式 Proxy

    //---------------------------15/04/21---------------------------- //Proxy 代理模式-----对象结构型模式 /* 1:意图: ...

  9. 【设计模式】—— 代理模式Proxy

    前言:[模式总览]——————————by xingoo 模式意图 代理模式为其他的对象增加一个代理对象,进行访问控制.从而避免直接访问一个对象,造成效率或者安全性上的降低. 应用场景 1 远程代理, ...

  10. 结构型设计模式之代理模式(Proxy)

    结构 意图 为其他对象提供一种代理以控制对这个对象的访问. 适用性 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用P r o x y 模式.下面是一 些可以使用P r o x y 模式常见 ...

随机推荐

  1. office web apps 在线问答预览

    最近在做项目时,需要用到在线文档预览,看过明道的一篇搭建office web apps服务的文章,但是由于时间的关系,没有仔细研究,这几天有时间,就拿出来研究了下,折腾了几天终于完成了部署,然后就搬过 ...

  2. 如何确认oracle客户端中的TNSNAMES中的service_name

    在我们安装oracle的客户端,或者PLSQL develop的时候,需要在oracle的安装目录下修改TNSNAME中配置你要连接的数据库的TNS参数.配置好了可以通过命令行使用tnsping命令测 ...

  3. mysql占用服务器cpu过高的原因以及解决办法

    登陆Mysql: mysql -p<port> -u<user> -p<pwd> mysql> show processlist; show processl ...

  4. LeetCode_118. Pascal's Triangle

    118. Pascal's Triangle Easy Given a non-negative integer numRows, generate the first numRows of Pasc ...

  5. LeetCode_101. Symmetric Tree

    101. Symmetric Tree Easy Given a binary tree, check whether it is a mirror of itself (ie, symmetric ...

  6. office word 設置默認的縮放為100%, office word set default Zoom to 100% permanently

    如題,今天剛好遇到一個老師不知道什麽原因造成Microsoft office word 每次打開都會縮放到70% ,所以google 了一下,還真有解決方法. 只要將默認的 使用者範本檔 Normal ...

  7. v-CheckBox

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  8. google搜索设置,在新的窗口打开

  9. kubernetes 部署ingress

    kubernetes Ingess 是有2部分组成,Ingress Controller 和Ingress服务组成,常用的Ingress Controller 是ingress-nginx,工作的原理 ...

  10. hadoop在eclipse当中如何添加源码?

    [学习笔记] /*org.apache.hadoop.mapreduce.Mapper.Context,java.lang.InterruptedException,想看map的源代码,按contro ...