A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余志强 黑马帝   /  2011-9-30 13:43  /  2125 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天学习了毕老师的装饰模式
就拿老师说的例子为例把:吃饭的例子
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的动态代理不是,除了这个区别还有别的吗?

3 个回复

倒序浏览
黑马网友  发表于 2011-9-30 13:51:18
沙发
上面的例子写错了不好意思!
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("甜点");

}
}

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-30 14:28:02
藤椅
动态代理有两种代理方式:
1、代理类和被代理类实现相同接口
2、代理类继承被代理类
但主要用的也是第一种
两者的区别主要区分:
装饰器模式:能动态的新增或组合对象的行为。
代理模式:为其他对象提供一种代理以控制对这个对象的访问.
装饰模式是“新增行为”,而代理模式是“控制访问”。关键就是我们如何判断是“新增行为”还是“控制访问”。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-10-1 01:27:52
板凳
也可以看成是一种不优雅的代理
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马