请教一个代理模式的问题

问题描述

最近在学习大话设计模式。看代理模式的时候,书本代码如下:namespaceProxyClass{publicabstractclassSubject{publicabstractvoidRequest();}publicclassRealSubject:Subject{publicoverridevoidRequest(){Console.WriteLine("真实的请求");//thrownewNotImplementedException();}}publicclassProxy:Subject//我的问题是,这里为什么需要继承Subject类,不继承可以吗?{RealSubjectrealsub;publicoverridevoidRequest()//如果不继承,直接在此处写一个新方法{if(realsub==null){realsub=newRealSubject();}realsub.Request();//thrownewNotImplementedException();}}}

调用如下:staticvoidMain(string[]args){Proxyproxy=newProxy();proxy.Request();Console.Read();}

解决方案

解决方案二:
保持方法的一致性啊……让外部感觉用起来跟没代理是一个样
解决方案三:
不继承也可以的。不继承的话在Proxy类中写一个Proxy的单例模式构造也可以。
解决方案四:
有什么优缺点,或是什么原则之类的指导?
解决方案五:
引用3楼ykj_fj的回复:

有什么优缺点,或是什么原则之类的指导?

继承是软件工程的需要,用在多态性功能中。也就是说,针对subject而设计的代码根本不管什么proxy、根本不知道proxy是什么东西,但是将来可以被proxy所“插入”和修改。这是因为proxy类型的对象是对subject类型对象的“既继承又重写”,因此保证了接口可调用、同时又可以功能扩展。
解决方案六:
学习“软件工程基本知识”跟“学习c#编程语法”的区别,可以用一个建筑设计师跟工地上的搬水泥的小工的区别做比喻。前者需要研究、设计各种预制件在工厂中的制造方法,和各种工艺规范,并不断重构设计(在1分钟之内就把整桩大厦的立体模型重新计算出来了);而后者眼中的大厦是一块一块拼凑起来的,看不到设计和重构的作用。站在后者的角度,也就是说只知道一点编程语法而没有学习软件工程基本知识,就无法比较全面一些地看到继承和多态的作用。
解决方案七:
用了抽象类,就是为了保持行为的一致性..

时间: 2024-10-24 23:36:22

请教一个代理模式的问题的相关文章

每天一个设计模式之代理模式

代理模式介绍 静态代理没有什么好说的,不断的写新的类,实现与被代理类一样的接口,从而来拓展功能.缺点太多,如接口变化,就要重写新的代理类. 动态代理使用最多的可能就是传说中的aop了.它解决了静态代理的缺点,即使接口变化了,代理类也不需要变化.动态代理实现方式主要有两种:1.jdk自带的 2.cglib技术 个人觉得代理模式的用处就是在不对原有类进行修改的情况下,对类的功能进行增强.有前置增强.后置增强.环绕增强.抛出增强.引入增强等.其中前四种增强是对类的方法的增强,叫做织入(Weaving)

大话设计模式之代理模式

代理模式的应用场合: 一,远程代理 二,虚拟代理 三,安全代理 简单来说,就是两个类共同实现接口,一个实现,一个调用这个实现.而调用实现的类,就是代理类. 针对书上的代码,我加了一个NAME变量和一个SHOWNAME方法.更加直观展示代理的细节. 1 /* 2 * Created by SharpDevelop. 3 * User: home 4 * Date: 2013/4/21 5 * Time: 9:33 6 * 7 * To change this template use Tools

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

1 代理模式定义 定义:给某个对象提供一个代理对象,并由代理对象控制对于原对象的访问,即客户不直接操控原对象,而是通过代理对象间接地操控原对象. 本篇文章主要介绍的是静态代理,关于动态代理请参考:设计模式之动态代理(dynamic proxy) 2 代理模式的作用 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 通过代理类对原有类进行功能增强,如增加缓存.异常处理.日志处理等,Spring AOP用的就是(动态)代理模式 3 代理模式一

javascript 之 代理模式

代理模式说明 说明:顾名思义就是用一个类来代替另一个类来执行方法功能,这个模式跟装饰模式有点相似,不一样的是,代理模式是代替客户初始化被代理对象类,而装饰模式采用接口或初装饰者参数引用的方式来执行的. 在动态面向对象语言里,代理模式即起到控制修饰被代理类的作用,也对被代理类起到了充分的隐藏保护作用:被代理类只到我们需要时,才被间接初始化调用: 场景描述: 很常见到的就是租房子的例子,房客要租房子,房东要把房子租出去,但是房客跟房东都没怎么有空找房子或在家等着有人看房子,就一同去找房屋中介.房东把

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

复制代码 代码如下: <?php /** * 代理模式 * * 为其他对象提供一个代理以控制这个对象的访问 * */ interface Proxy { public function request(); public function display(); } class RealSubject { public function request() { echo "RealSubject request<br/>"; } public function disp

代理模式(proxy pattern) 未使用代理模式 详解

如果需要监控(monitor)类的某些状态, 则需要编写一个监控类, 并同过监控类进行监控. 但仅仅局限于本地, 如果需要远程监控, 则需要使用代理模式(proxy pattern). 具体方法: 1. 类中需要提供状态信息, 并提供一些get方法, 进行调用. /** * @time 2014年7月11日 */ package proxy; /** * @author C.L.Wang * */ public class GumballMachine { String location; //

传统设计模式(十一)代理模式

所谓的代理,就是代表某个真实的对象.在这个设计模式中,代理可以假装自己是远程对象,但其实只是一个中间角色.客户对象所作的就像是在做远程方法调用,但其实只是调用本地资源中得"代理"对象上得方法,再由代理处理所有网络通信的底层细节. 其实其实项目实例神马的 根本就没必要了 看一下Web Service的调用方式大家也许就明白了,它会在客户端生成一个代理类 - - 已经很完美的诠释了代理模式这个概念 虫子放下水 直接拿以前监控项目中客户端采集的代理方法了 --_____-- 服务器端 [We

Java的代理模式

前几天一个网友指出了我的文章中一些有失偏颇之处,那些文章都是我在阅读Java Core的时候做的总结,顺便加上我个人的一些理解.因为看的e文版,理解上有些地方可能还欠妥.下面谈一下对Java中代理模式(Proxy)的认识. 代理,想必大家都应该知道是什么冬冬了,一般的手机产商都有代理商,歌星们都有自己的经纪人,如此这些都可以看作是一种代理模式.下面我选择如下的一种情景来进行讲述:某董事长出差,但是此时公司有个聚会,董事长买单,但是由他的秘书去结帐.我们就权且把这个看作一个代理行为,^_^. 首先

浅析.NET开发中代理模式的使用

当我们需要使用的对象很复杂或者需要很长时间去构造,这时就可以使用代理模式(Proxy).例如:如果构建一个对象很耗费时间和计算机资源,代理模式(Proxy)允许我们控制这种情况,直到我们需要使用实际的对象.一个代理(Proxy)通常包含和将要使用的对象同样的方法,一旦开始使用这个对象,这些方法将通过代理(Proxy)传递给实际的对象. 一些可以使用代理模式(Proxy)的情况: 1.一个对象,比如一幅很大的图像,需要载入的时间很长. 2.一个需要很长时间才可以完成的计算结果,并且需要在它计算过程