Dynamic Proxy、 Proxy Pattern and Decorator Pattern
来源:互联网 发布:linux ubuntu iso下载 编辑:程序博客网 时间:2024/05/21 12:32
动态代理:
在目前的Java开发包中包含了对动态代理的支持,但是其实现只支持对接口的的实现。其实现主要通过是java.lang.reflect.Proxy类和java.lang.reflect.InvocationHandler接口。Proxy类主要用来获取动态代理对象,InvocationHandler接口用来约束调用者实现,
如下,IHelloWorld接口定义的业务方法,HelloWorld是IHelloWorld接口的实现,HelloWorldProxy是 InvocationHandler接口实现。
运行结果:
invoke before method!
say hello!
invoke after method!
- 首先获取一个业务接口的实现对象;
- 获取一个InvocationHandler实现,此处是HelloWorldProxy对象;
- 创建动态代理对象;(只支持对接口的的实现)
- 通过动态代理对象调用sayHello()方法,此时会在原始对象HelloWorld. sayHello()方法前后输出两句字符串。
Proxy模式:
代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及消息被委托类执行后的后续处理。
为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别。通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性。
代理模式常用的两个目的:
- 授权机制 不同级别的用户对同一对象拥有不同的访问权利,代理来控制这两种用户对资源的访问权限.
- 某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动(如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片).
Decorator Pattern:
动态给一个对象添加一些额外的职责,就象在墙上刷油漆.使用Decorator模式相比用生成子类方式达到功能的扩充显得更为灵活.我们通常可以使用继承来实现功能的拓展,如果这些需要拓展的功能的种类很繁多,那么势必生成很多子类,增加系统的复杂性。
使用Decorator的理由是:这些功能需要由用户动态决定加入的方式和时机.Decorator提供了"即插即用"的方法,在运行期间决定何时增加何种功能.
总结:
Proxy模式和Decorator模式本质上没什么大的区别,只是他们的使用目的不一样而已:proxy只是对现在功能作了代理,而decorator不是对现在功能代理,是添加新的功能。而Java自己的动态代理则是更灵活一点的代理模式的实现,代理类被动态生成。 他们都是java编程思想中对“继承”“多态”“面向接口编程”原则的较好实践而已。
- Dynamic Proxy、 Proxy Pattern and Decorator Pattern
- Proxy pattern
- Proxy Pattern
- Proxy Pattern
- Proxy Pattern
- Proxy Pattern
- Proxy Pattern
- Design Pattern—— Dynamic Proxy Pattern 动态代理模式
- Design Pattern - Structural Pattern - Proxy
- The eleventh pattern------Proxy Pattern
- Design Pattern 7-proxy
- 代理模式(Proxy Pattern)
- design pattern : proxy
- 代理模式(Proxy Pattern)
- Proxy Pattern (代理模式)
- Proxy pattern 代理模式
- 代理模式(Proxy pattern)
- adapter proxy facade pattern
- Peppermint Linux云特征体验
- Watir学习笔记之一 浏览器的简单使用
- Jersey 非 web 方式 发布服务
- 二、Qt Creator编写多窗口程序
- 三、Qt Creator登录对话框
- Dynamic Proxy、 Proxy Pattern and Decorator Pattern
- 利用JAVA获取远程文件及断点续传
- 你快乐吗
- WinCE中文件的路径
- MySQL Connector/Net 6.3.3 Beta 发布
- 追忆似水流年
- 转自李承鹏博客------震还是不震
- set_bit()
- magent做memcached集群