黑马程序员技术交流社区
标题:
关于动态代理与装饰模式的区别
[打印本页]
作者:
余志强
时间:
2011-9-30 13:43
标题:
关于动态代理与装饰模式的区别
今天学习了毕老师的装饰模式
就拿老师说的例子为例把:吃饭的例子
class Person{
public void eat(){
System.out.println("吃饭");
}
}
public class PersonEnhance{
private Person p;
public PersonEnhance(Person p){
System.out.println("开胃酒");
p.eat();
System.out.println("甜点");
}
}
通过老师的讲解,我明白了装饰模式就是在原有类的基础上把某个方法增强功能
但是这让我想到了java 的动态代理,他也是在某个方法的基础上增加额外的功能,那么她们有什么区别呢?
装饰类和被装饰的类是应该继承或实现相同的接口,而java的动态代理不是,除了这个区别还有别的吗?
作者:
匿名
时间:
2011-9-30 13:51
上面的例子写错了不好意思!
class Person{
public void eat(){
System.out.println("吃饭");
}
}
public class PersonEnhance{
private Person p;
//把需要增强 的类传进去初始化
public PersonEnhance(Person p){
this.p=p;
}
public void enhanceEat(){
System.out.println("开胃酒");
p.eat();
System.out.println("甜点");
}
}
作者:
匿名
时间:
2011-9-30 14:28
动态代理有两种代理方式:
1、代理类和被代理类实现相同接口
2、代理类继承被代理类
但主要用的也是第一种
两者的区别主要区分:
装饰器模式:能动态的新增或组合对象的行为。
代理模式:为其他对象提供一种代理以控制对这个对象的访问.
装饰模式是“新增行为”,而代理模式是“控制访问”。关键就是我们如何判断是“新增行为”还是“控制访问”。
作者:
匿名
时间:
2011-10-1 01:27
也可以看成是一种不优雅的代理
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2