C#面向对象设计之——代理模式(十三)

一、前言

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

二、结构图

三、实例代码

namespace 代理模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Proxy proxy = new Proxy();
            proxy.Request();

            Console.Read();
        }
    }

    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();
        }
    }
}

四、总结

什么时候使用代理模式呢?
第一,远程代理,也就是为一个对象在不同的地址空间提供局部代表,这样就可以隐藏一个对象存在于不同地址空间的事实。例如在.net中的webservice,当我们在应用程序中加入一个Web引用,引用一个webservice,则此时在项目中会生成一个WebReference的文件夹和一些文件,其实它们就是代理,这就使得客户端程序滴啊用代理就可以解决远程访问的问题。
第二,虚拟代理,根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象,这样达到性能的最优化,例如打开一个很大的HTML页面,里面有很多文字和图片,那些文字加载了,但是图片没有加载完,只看到图片占用一定大小的空间,等待内容的填充,这就是通过虚拟代理来替代真实的图片,此时代理存储了真实的图片的路径和尺寸,这就是浏览器中用到的模式进行优化下载。
第三,安全代理,用来控制真实对象的访问权限。
第四,智能指引,指当调用真实的对象时,代理处理另外一些事,例如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它,或者当第一次引用一个持久对象时,将它装入内存,或在访问一个实际对象前,检查是否已经锁定它了,以保证其他对象不能改变它。

时间: 2024-10-27 08:30:20

C#面向对象设计之——代理模式(十三)的相关文章

C#面向对象设计之——桥接模式(八)

一.前言 桥接模式就是将抽象部分和它的实现部分分离,使它们都可以独立地变化.抽象与它的实现分离,实现是指抽象类和它的派生类用来实现自己的对象.就手机而言,手机既可以用品牌来分类,也可以以功能来分类. 在面向对象设计中,我们有一个很重要的原则:合成/聚合复用原则,即优先使用对象合成/聚合,而不是类继承. 对象的继承关系是在编译时就已经定好了,所以无法再运行时改变从父类继承发生的变化.当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或者被其他更适合的类替换,这种依赖关系限制了

拦截器的设计思想——代理模式

代理模式:静态代理和动态代理 1.代理类和被代理类必须实现同一个借口 2.代理类和别代理类有一种关联关系 静态代理: 例如实现一个日志: //定义一个接口 public interface UserDao{ public void delete(); } //定义一个实现类 public class UserDaoImpl implements UserDao{ public void delete(){ System.out.pritln("成功删除"); } } //定义一个代理类

java设计优化--代理模式

代理模式使用代理对象完成用户的请求,屏蔽用户对真实对象的访问. 代理模式的用途很多,比如因为安全原因,需要屏蔽客户端直接访问真实对象:或者在远程调用中,需要使用代理对象处理远程方法中的技术细节:或者为了提升系统,对真是对象进行封装,从而达到延迟加载的目的. 在系统启动时,将消耗资源最多的方法使用代理模式分离,就可以加快系统的启动速度,减少用户的等待时间.在用户真正在做查询是,再由代理类加载真实的类,完成用户请求.这就是使用代理模式达到延迟加载的目的. 1.静态代理实现: 主题接口: 1 publ

面向对象编程思想-代理模式

一.引言 在系统开发过程中,大多会遇到跨网络做系统应用间数据对接问题,但目标对象不允许跨网络直接访问数据,通常考虑到网络和安全性能等因素,开发者会在客户端和目标对象间添加一层中间层--代理层,也是即将要介绍的代理模式(Proxy). 二.代理模式介绍 在介绍代理模式前,我们首先看一下代理模式的分类 1.远程(Remote)代理:为一个位于不同地址空间的对象提供局部代表对象,隐藏一个对象存在于不同地址空间的事实. 典型例子:webservice在.NET中的应用,在应用程序项目中加入web引用,引

C#面向对象设计之——备忘录模式Memento Pattern(二十三)

一.前言 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象回复到原先保存的状态. 二.结构图 三.实例代码 using System; using System.Collections.Generic; using System.Text; namespace 备忘录模式 { class Program { static void Main(string[] args) { Originator o = new Originator()

C#面向对象设计之——命令模式(十五)

一.前言 命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,另外对请求排队或记录请求日志,以及支持可撤销的操作. 二.结构图 三.实例代码 namespace 命令模式 { class Program { static void Main(string[] args) { //开店前的准备 Barbecuer boy = new Barbecuer(); Command bakeMuttonCommand1 = new BakeMuttonCommand(boy); Co

C#面向对象设计之——状态模式(十九)

一.前言 状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.状态模式主要解决的是当一个对象状态转换的条件表达式过于复杂时的情况,把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简化.当然,如果这个状态判断很简单,那就没必要用状态模式了. 二.结构图 三.实例代码 using System; using System.Collections.Generic; using System.Text; namespace 状态模式 { class P

设计模式(十三): Proxy代理模式 -- 结构型模式

  设计模式(十一)代理模式Proxy(结构型) 1.概述 因为某个对象消耗太多资源,而且你的代码并不是每个逻辑路径都需要此对象, 你曾有过延迟创建对象的想法吗 ( if和else就是不同的两条逻辑路径) ? 你有想过限制访问某个对象,也就是说,提供一组方法给普通用户,特别方法给管理员用户?以上两种需求都非常类似,并且都需要解决一个更大的问题:你如何提供一致的接口给某个对象让它可以改变其内部功能,或者是从来不存在的功能? 可以通过引入一个新的对象,来实现对真实对象的操作或者将新的对象作为真实对象

webgame设计之功能模块的代理模式

原文地址:http://chengduyi.com/blog/?post=27 在游戏设计中,通常会将一些实现了具体功能的模块进行封装,达到重用的目的.这些功能模块包括:1.网络通信模块(实现连接,断开,消息发送.接收,错误等处理):2.资源加载管理模块(实现资源加载,缓存,进度通知,分类型加载.管理等). 设计实现这些功能模块的方法很多,设计过程中最好做到使这些模块在外部启动简单.使用方便.重用容易. 我在设计中使用了代理模式的思想,就是将封装的功能留出一个代理类供外部继承实现.使用时候的具体