黑马程序员技术交流社区
标题:
动态代理和装饰类
[打印本页]
作者:
党巾水
时间:
2012-7-27 10:45
标题:
动态代理和装饰类
本帖最后由 刘馨琪 于 2012-8-7 14:43 编辑
请问动态代理和装饰类有什么区别吗?
感觉都是给原来的功能进行扩展。不解中……什么时候用装饰类,什么时候用动态代理呢?
谢谢!
作者:
胡文凡
时间:
2012-7-27 10:48
用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象的实例。并且,当我们使用装饰器模式的时候,我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。
换句话说,区别在于使用代理模式,代理和真实对象之间的的关系通常在编译时就已经确定了,而装饰者能够在运行时递归地被构造。
作者:
党巾水
时间:
2012-7-27 10:56
huhuang03 发表于 2012-7-27 10:48
用代理模式,代理类(proxy class)可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候, ...
递归地被构造
这6个字有点深奥~求详解,谢谢
作者:
胡文凡
时间:
2012-7-27 10:59
不是什么递归,就是一步一步的意思。。。
作者:
李菁
时间:
2012-7-27 11:00
动态代理是在不改变接口的前提下,控制对象的访问。只有代理对象认为合适时,才会将客户端的请求传递给真实对象。
装饰类是在不改变接口的前提下,动态扩展对象的功能。装饰模式可以在不使用创造更多子类的情况下,给对象功能扩展
作者:
乐峰
时间:
2012-7-27 11:14
动态代理有两种代理方式:
1、代理类和被代理类实现相同接口
2、代理类继承被代理类
但主要用的也是第一种
两者的区别主要区分:
装饰器模式:能动态的新增或组合对象的行为。
代理模式:为其他对象提供一种代理以控制对这个对象的访问.
装饰模式是“新增行为”,而代理模式是“控制访问”。关键就是我们如何判断是“新增行为”还是“控制访问”。
作者:
孙建飞
时间:
2012-7-27 11:18
02.public class Proxy implements Subject{
03.
04. private Subject subject;
05. public Proxy(){
06. //关系在编译时确定
07. subject = new RealSubject();
08. }
09. public void doAction(){
10. ….
11. subject.doAction();
12. ….
13. }
14.}
01.//代理的客户
02.public class Client{
03. public static void main(String[] args){
04. //客户不知道代理委托了另一个对象
05. Subject subject = new Proxy();
06. …
07. }
08.}
01.//装饰器模式
02.public class Decorator implements Component{
03. private Component component;
04. public Decorator(Component component){
05. this.component = component
06. }
07. public void operation(){
08. ….
09. component.operation();
10. ….
11. }
12.}
01.//装饰器的客户
02.public class Client{
03. public static void main(String[] args){
04. //客户指定了装饰者需要装饰的是哪一个类
05. Component component = new Decorator(new ConcreteComponent());
06. …
07. }
08.}
作者:
党巾水
时间:
2012-8-7 14:44
谢谢啦!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2