在学习设计模式时,阅读了设计模式的理论,研究了JDK中一些对设计模式的具体应用例子,对一些设计模式有了进一步认识。不同设计模式之间有其细微差别,现在就适配器和装饰者这两者之间的区别,说一下我的理解。
[b]适配器adapter:[/b]
有A、B、C三个类,A类是适配器,B类有个声明出来的方法methodWithinB要被调用,但是这个B类方法methodWithinB里的内容不能使用或者是想用C类里的方法methodWithinC中的内容。此时,B类方法methodWithinB需要使用适配器来达到此目的,[color=red]该方法在实际使用时,原有的逻辑内容已经不存在了。[/color]
具体实现:适配器A继承被适配者B,A类override重写B类方法methodWithinB,将C类作为A类一个属性传给A,A类方法 methodWithinB调用C类方法methodWithinC。A类完成了将对B类方法methodWithinB的调用转移到C类方法methodWithinC。
[b]装饰者 decorator:[/b]
有A、B两个类,A类是装饰者,B类是被装饰者,由A类负责去使用B类,[color=red]在调用B类方法时,不改变B类方法里原有的逻辑内容[/color],只是在调用B类方法时,在调用它的位置前后增加需要补充的额外逻辑。
具体实现:将B类作为A类的一个属性实例,传给A类的一个属性,A类负责去调用B类实例中的方法,调用时,A类根据需要加上其他的逻辑。
[b]适配器adapter:[/b]
有A、B、C三个类,A类是适配器,B类有个声明出来的方法methodWithinB要被调用,但是这个B类方法methodWithinB里的内容不能使用或者是想用C类里的方法methodWithinC中的内容。此时,B类方法methodWithinB需要使用适配器来达到此目的,[color=red]该方法在实际使用时,原有的逻辑内容已经不存在了。[/color]
具体实现:适配器A继承被适配者B,A类override重写B类方法methodWithinB,将C类作为A类一个属性传给A,A类方法 methodWithinB调用C类方法methodWithinC。A类完成了将对B类方法methodWithinB的调用转移到C类方法methodWithinC。
[b]装饰者 decorator:[/b]
有A、B两个类,A类是装饰者,B类是被装饰者,由A类负责去使用B类,[color=red]在调用B类方法时,不改变B类方法里原有的逻辑内容[/color],只是在调用B类方法时,在调用它的位置前后增加需要补充的额外逻辑。
具体实现:将B类作为A类的一个属性实例,传给A类的一个属性,A类负责去调用B类实例中的方法,调用时,A类根据需要加上其他的逻辑。
本文通过对比适配器和装饰者两种设计模式,阐述了它们在解决不同问题时的应用方式。适配器模式通过重写方法,将一个类的接口转换为另一个类的接口;而装饰者模式则是在不改变原有方法的基础上,为其添加新的功能。
922

被折叠的 条评论
为什么被折叠?



