前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式- 代理模式(Proxy Pattern)

设计模式- 代理模式(Proxy Pattern)

作者头像
易兒善
发布2019-05-14 09:55:56
2860
发布2019-05-14 09:55:56
举报
文章被收录于专栏:挖坑填坑挖坑填坑

定义

代理模式(Proxy)定义:代理模式为客户端程序提供一种中间层以控制对这个对象的访问。

C#例子

代码语言:javascript
复制
    /// <summary>
    /// 通用接口定义
    /// </summary>
    public interface ISubject
    {
        void Say();
    }
    /// <summary>
    /// 被代理者
    /// </summary>
    public class Subject : ISubject
    {
        public void Say()
        {
            Console.WriteLine("Hello");
        }
    }
    /// <summary>
    /// 代理
    /// </summary>
    public class Proxy : ISubject
    {
        private Subject _subject;
        public void Say()
        {
            if (_subject == null) {
                _subject = new Subject();
            }
            _subject.Say();
        }
    }

代理模式参与者:

  • ISubject:定义Subject与Proxy的共用接口,从而在任何使用Subject的地方都可以使用Proxy。
  • Subject:定义Proxy所代表的Subject。
  • Proxy:维持一个Subject引用,使得代理可以访问Subject。提供一个与Subject的接口相同的接口,这样代理就可以替代Subject。控制对Subject的访问,并可能负责对Subject的创建和删除。

代理模式应用分析

代理模式适用范围很广,不同的代理适合于不同的情形。

  • 远程代理为一个对象在不同的地址空间提供局部代表。
  • 虚代理在需要创建开销很大的对象时缓存对象信息。
  • 保护代理控制对原始对象的访问。保护代理用于对象应该有不同的访问权限的时候。
  • 智能指引取代了简单指引,它在访问对象时执行了一些附加操作。它的典型用途包括:对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放。当第一次引用一个持久对象时,将它装入内存。在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。

代理模式特点:

  • 代理模式在访问对象时引入一定程度的间接性,可以隐藏对象的位置。
  • 代理模式可以对用户隐藏一种称之为copy-on-write的优化方式。当进行一个开销很大的复制操作的时候,如果复制没有被修改,则代理延迟这一复制过程,这一可以保证只有当这个对象被修改的时候才对它进行复制。

代理模式与装饰模式比较分析

  • 装饰器模式关注于在一个对象上动态的添加方法,代理模式关注于控制对对象的访问。
  • 装饰器模式中*Decorator和CreateOrder都实现ICommand,代理模式中Proxy和Subject都实现ISubject。使用这两种模式,都可以很容易地在具体对象的方法前面或者后面加上自定义的方法。
  • Proxy 可以对Client隐藏对象的具体信息,在使用代理模式时,常在Proxy中创建一个对象的实例。Proxy与Subject之间的关系在编译时就能确定。
  • 在使用装饰模式时,常是将CreateOrder对象作为一个参数传给_Decorator的构造器,_Decorator在运行时递归的被构造

其他

源码地址

dotnet-design-patterns

其他设计模式

23种设计模式

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.05.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 定义
  • C#例子
  • 代理模式参与者:
  • 代理模式应用分析
  • 代理模式特点:
  • 代理模式与装饰模式比较分析
  • 其他
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档