本帖最后由 fantacyleo 于 2014-8-11 11:31 编辑
装饰是增强原来对象的功能。而代理没有增强被代理对象的功能。比如代理对象实现了Collection接口,在被代理对象的add方法调用前后计时,你可以说这是提供了额外的功能,可这和add方法提供的”增加元素到集合“的功能无关,被代理对象的add方法没有因为你计时了而在功能上有任何改变。更重要的是,你的代理对象只能调用Collection接口已定义的方法,不能调用它没有的方法。
装饰就不一样了,原先Reader对象没有缓冲区,没有一次读一行的readLine功能,而用了BufferedReader后,你就可以调用一个全新的方法readLine,从原先的读字符变成了读一行,这才叫增强了原对象的功能 |