锁定老帖子 主题:设计模式之适配器 Adapter
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
作者 | 正文 | ||||||||||||
发表时间:2007-01-16
Adapter 换个包装,再度利用。
此实例把“Hello”字符串输出成 (Hello) *Hello* 适配器起到把交流电转换成直流电的作用,在这里的适配器是PrintBanner类,它分别利用showWithParen方法,showWithAster方法来实现printWeak和printStrong。
Banner 类
Print类
PrintBanner 类
Main 测试类
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2007-01-16
见不着女的,见着一个,支持一下。
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2007-01-17
本示例中,在建立PrintBanner类的对象时,把它指定到Print类变量,即:
print p = new PrintBanner("Hello"); 为什么不采取下面这个制定到PrintBanner类变量的做法呢? PrintBanner p = new PrintBanner("Hello"); |
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2007-01-17
是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2007-01-17
在你的例子中,PrintBanner和Print接口所提供的方法虽然相同,但在某些情形下,PrintBanner类的方法可能会比较多,这个例子的用意很明显,是先将其指定到Print类型变量后再使用,其实是要利用Print接口的方法,而不是PrintBanner类的方法。
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2007-01-17
akun_007 写道 是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?
你一个“粗略”把适配器的精髓都去掉了,如果这么简单的认为,就没有这么多设计模式了。 如果用适配器这种模式,可以降低代码的耦合度。 比如,从Main类的源代码就完全看不出有Banner类,showWithParen方法,showWithAster方法。 换个说法,如果你要改输出的格式,只需要改PrintBanner类就可以了,Main类完全不用改变。 |
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2007-01-17
设计模式是按作用分的,看代码的话,基本都是adapter或者bridge
而且我一向认为模式是重构出来的 |
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2007-01-18
qingzi2534 写道 akun_007 写道 是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?
你一个“粗略”把适配器的精髓都去掉了,如果这么简单的认为,就没有这么多设计模式了。 如果用适配器这种模式,可以降低代码的耦合度。 比如,从Main类的源代码就完全看不出有Banner类,showWithParen方法,showWithAster方法。 换个说法,如果你要改输出的格式,只需要改PrintBanner类就可以了,Main类完全不用改变。 谢谢qingzi2534,我对设计模式的学习和积累不是很多,现在正在学习你的文章。 |
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2007-01-18
我也是初学者,现在才看了几个模式而已,只有懂得了怎么用它,才是真正的掌握。希望大家都说说自己的理解,这样才能共同进步啊。
|
|||||||||||||
返回顶楼 | |||||||||||||
发表时间:2007-01-18
qingzi2534 写道 本示例中,在建立PrintBanner类的对象时,把它指定到Print类变量,即:
print p = new PrintBanner("Hello"); 为什么不采取下面这个制定到PrintBanner类变量的做法呢? PrintBanner p = new PrintBanner("Hello"); 调用统一,方便业务拓展。可能将来你还要有打印printcard类。 你举的例子是类适配器,还有对象适配器。 |
|||||||||||||
返回顶楼 | |||||||||||||