- 浏览: 41105 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
xieyaxiong:
songbin0201 写道整篇文章的精华在那些gif图片上 ...
排序算法 -
songbin0201:
整篇文章的精华在那些gif图片上
排序算法
针对问题: 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式和装饰模式很相似,不同之处在于代理模式是给主题添加控制,但是这些控制来自代理自身的实现,不像装饰模式一样添加的功能来自己主题的子类提供。
装饰模式可以装饰很多次来得到自己想要的实体,类似的代理模式也可以代理很多次,但通常不会这种做,因为这不是代理模式的目的。装饰模式的目的是添加功能,而代理模式的目的是添加控制。
代理模式结构图:
代理模式实现代码:
/** * 抽象主题类 * @author bruce * */ public abstract class Subject { public abstract void request(); } /** * 具体主题类 * @author bruce * */ public class RealSubject extends Subject{ @Override public void request() { // TODO Auto-generated method stub System.out.println("real do something"); } } /** * 代理类 * @author bruce * */ public class Proxy extends Subject{ private Subject subject; public Proxy(Subject subject){ this.subject=subject; } @Override public void request() { // TODO Auto-generated method stub doBefore(); subject.request(); doAfter(); } private void doBefore(){ System.out.println("before doing something"); } private void doAfter(){ System.out.println("after doing something"); } } /** * 测试 * @author bruce * */ public class Client { public static void main(String[] args) { Subject subject=new Proxy(new RealSubject()); subject.request(); /** * output: before doing something real do something after doing something */ } }
动态代理模式:代理模式只能在运行前写好,也就是说是静态的,而动态代理可以在运行时期创建(运用反射)
动态代理模式实现代码:
/** * 抽象主题类 * @author bruce * */ public interface Subject { public void requestA(); public void requestB(); } /** * 具体主题类 * @author bruce * */ public class RealSubject implements Subject{ public void requestA() { // TODO Auto-generated method stub System.out.println("do A"); } public void requestB() { // TODO Auto-generated method stub System.out.println("do B"); } } /** * 代理内容实现 * @author bruce * */ public class SubjectProxy implements InvocationHandler{ private Object object; public SubjectProxy(Object object){ this.subject=subject; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // TODO Auto-generated method stub Object object; if(method.getName().equals("requestA")){ System.out.println("allow to do requestA method"); object=method.invoke(subject, args); return object; }else if(method.getName().equals("requestB")){ System.out.println("not allow to do requestB method"); return null; }else{ System.out.println("other method"); } return null; } } /** * 测试 * @author bruce * */ public class Client { public static void main(String[] args) { RealSubject subject=new RealSubject(); Subject proxy=(Subject)Proxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(), new SubjectProxy(subject)); System.out.println("------------"); proxy.requestA(); System.out.println("------------"); proxy.requestB(); /** * output: * ------------ allow to do requestA method do A ------------ not allow to do requestB method */ } }
发表评论
-
design pattern——状态模式
2012-07-25 17:48 711针对问题:有时候一个方法可能有很多if..else来判断 ... -
design pattern——组合模式
2012-07-24 11:16 616针对问题:组合模式使我们在处理树型结构的问题中,模糊了简单元素 ... -
design pattern——迭代器模式
2012-07-23 17:50 656针对问题:提供统一接口访问集合,屏蔽集合内部数据的访问和数据结 ... -
design pattern——模板方法模式
2012-07-23 16:25 714针对问题:许多类可能做着大同小异的事情,很多方法都有重复,可以 ... -
design pattern——外观模式
2012-07-20 15:11 615针对问题:在软件开发系统中,客户程序经常会与复杂系统的内部子系 ... -
design pattern——适配器模式
2012-07-20 14:30 697针对问题:将一个类的接口转换成客户希望的另外一个接口。A ... -
design pattern——命令模式
2012-07-19 17:03 781针对问题:在软件系统中,“行为请求者”与“行为实现 ... -
design pattern——单例模式
2012-07-13 17:34 673单例是乎没什么好说的,创建的过程中需要考虑到的是并发安全问题和 ... -
design pattern——抽象工厂模式
2012-07-13 17:31 692针对问题:和工厂方法模式类似,用一个继承体系来实现创建对象的 ... -
design pattern——工厂方法模式
2012-07-13 17:25 666针对问题:当要创建的产品种类很多,并且会随着时间的推移会不断 ... -
design pattern——装饰者模式
2012-07-12 13:40 713针对问题:在两个集合中的对象期望做到任意组合,而这样的组合的可 ... -
design pattern——观察者模式
2012-07-11 17:59 663针对问题:在消息-通知 的程序结构中,为了通知待通知的 ... -
design pattern——策略模式
2012-07-10 15:16 661针对问题:在许多继承体系结构中,经常出现的一些问题是在超 ... -
抽象类还是接口?
2012-07-10 11:29 666从概念上看 抽象类要描述的是一种类型,和普通的实 ...
相关推荐
实现对象的复用——享元模式(二) 实现对象的复用——享元模式(三) 实现对象的复用——享元模式(四) 实现对象的复用——享元模式(五) 代理模式-Proxy Pattern 设计模式之代理模式(一) 设计模式之代理模式...
12. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问,可以实现虚拟代理、安全代理、远程代理等。 13. **命令模式**:将请求封装为一个对象,以便使用不同的请求、队列请求、记录请求日志,或者支持可...
7. **代理模式(Proxy)**:为其他对象提供一种代理以控制对这个对象的访问。代理可以在调用实际对象之前和之后添加额外的操作,例如权限检查或者缓存。 8. **策略模式(Strategy)**:定义了一系列的算法,并将每...
- 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 3. **行为型模式**: - 责任链模式:将请求沿着处理者链传递,直到某个处理者处理请求。 - 命令模式:将命令封装为对象,以便使用不同的请求、队列...
为了帮助 .NET 开发者更好地理解和应用这些设计模式,《Head First 设计模式》为 .NET 2.0 特别推出了一个配套文档——《设计模式框架》(Design Pattern FrameworkTM),该文档涵盖了原书中介绍的所有设计模式,并...
代理模式的主要优点是可以隐藏真实的服务对象,以便实现控制访问的目的。 以上是对文档中所涵盖的设计模式基本概念及其核心知识点的概述。设计模式是软件开发中的重要工具之一,掌握它们对于提高编程技能、优化代码...
通过阅读GOF23种设计模式.docx文档和探索DesignPattern项目中的代码,你可以深入理解每种模式的用途、优点以及如何在C#和.NET Core环境中实现它们。对于想要提升编程技能和代码质量的开发者来说,这是一个宝贵的资源...
这类模式主要关注如何将类或对象组合成更大的结构,如适配器模式(Adapter)、桥接模式(Bridge)、装饰模式(Decorator)、外观模式(Facade)、享元模式(Flyweight)、组合模式(Composite)和代理模式(Proxy)...
代理模式(Proxy)提供一个代理对象来控制对另一个对象的访问。这些模式通过组合或封装的方式,可以在不修改现有代码的基础上,灵活地增加系统的可扩展性。 行为型模式专注于对象间的通信,用以实现更加松耦合的...
- 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 -享元模式:使用共享对象可以有效地支持大量细粒度的对象。 3. 行为型设计模式: - 责任链模式:避免对象之间耦合度过高,通过将请求沿着处理者链...
- 代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。 - 装饰模式(Decorator):动态地给一个对象添加一些额外的职责,增加功能而不改变其结构。 - 享元模式(Flyweight):使用共享对象,有效...
**设计模式**(Design Patterns)是软件工程中的一个重要概念,它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。本章节将从多个角度对设计模式进行深入探讨。 #### 二、设计模式的基本定义 ...
#### 第11章:控制对象访问——代理模式 代理模式提供了一个代理对象,用来控制对真实对象的访问。代理模式可以帮助我们实现懒加载、权限验证等功能,同时还可以在不修改原有对象的基础上增加额外的功能。 #### 第...
代理模式(Proxy Pattern)**:通过代理对象来控制对真实对象的访问,可以增加额外的功能或控制访问权限。在Cocoa中,代理模式被广泛应用于网络请求、延迟加载等场景。 #### 五、核心数据(Core Data) 书中还特别...
### 设计模式精解——GoF 23种设计模式解析及C++实现源码 #### 引言 设计模式是软件工程领域中一个极为重要的概念,它代表着一系列被广泛接受的解决特定问题的方法。GoF(Gang of Four)所提出的23种设计模式更是...
其中包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。这些模式有助于减少类之间的耦合,提高代码的可重用性和可维护性。 3. 行为型模式:这类模式主要关注对象间如何交互和分配...