2007-01-16
设计模式之适配器 Adapter
关键字: Adapter 换个包装,再度利用。Adapter 换个包装,再度利用。
此实例把“Hello”字符串输出成
(Hello)
*Hello*
适配器起到把交流电转换成直流电的作用,在这里的适配器是PrintBanner类,它分别利用showWithParen方法,showWithAster方法来实现printWeak和printStrong。
| 电源 | 程序示例 | |
| 既有的内容 | 交流电220v | Banner类 (showWithParen,showWithAster) |
| 转换装置 | 适配器 | PrintBanner类 |
| 需要的结果 | 直流电12v | Print接口(printWeak,PrintStrong) |
Banner 类
- public class Banner {
- private String string;
- public Banner (String string) {
- this.string = string ;
- }
- public void showWithParen() {
- System.out.println("("+string+")");
- }
- public void showWithAster() {
- System.out.println("*"+string +"*");
- }
- }
Print类
- public interface Print {
- public abstract void printWeak();
- public abstract void printStrong();
- }
PrintBanner 类
- public class PrintBanner extends Banner implements Print {
- public PrintBanner(String string) {
- super(string);
- }
- public void printWeak() {
- showWithParen();
- }
- public void printStrong() {
- showWithActer();
- }
- }
Main 测试类
- public class Main {
- public static void main(String[] args) {
- Print p = new PrintBanner("Hello");
- p.printWeak();
- p.printStrong();
- }
- }
评论
qqwjz
2007-07-10
封装“变化”
zhangsheng79
2007-07-09
不评价,建议好好看看设计模式的目的
qqwjz
2007-07-09
akun_007 写道
是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?
你说的情况是“类的Adapter”,换成“对象的Adapter”就不是这个样式了。我个人觉得引入适配器的目的是为了在不改变主程序(除了New对象之外)前提下,添加新的功能,当然这个新的功能可以是你即将要写的,也可以是集成和兼容已经有的功能。本质上是一个面向接口编程的思想。
kevinStar
2007-01-18
qingzi2534 写道
本示例中,在建立PrintBanner类的对象时,把它指定到Print类变量,即:
print p = new PrintBanner("Hello");
为什么不采取下面这个制定到PrintBanner类变量的做法呢?
PrintBanner p = new PrintBanner("Hello");
print p = new PrintBanner("Hello");
为什么不采取下面这个制定到PrintBanner类变量的做法呢?
PrintBanner p = new PrintBanner("Hello");
调用统一,方便业务拓展。可能将来你还要有打印printcard类。
你举的例子是类适配器,还有对象适配器。
qingzi2534
2007-01-18
我也是初学者,现在才看了几个模式而已,只有懂得了怎么用它,才是真正的掌握。希望大家都说说自己的理解,这样才能共同进步啊。
akun_007
2007-01-18
qingzi2534 写道
akun_007 写道
是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?
你一个“粗略”把适配器的精髓都去掉了,如果这么简单的认为,就没有这么多设计模式了。
如果用适配器这种模式,可以降低代码的耦合度。
比如,从Main类的源代码就完全看不出有Banner类,showWithParen方法,showWithAster方法。
换个说法,如果你要改输出的格式,只需要改PrintBanner类就可以了,Main类完全不用改变。
谢谢qingzi2534,我对设计模式的学习和积累不是很多,现在正在学习你的文章。
deafwolf
2007-01-17
设计模式是按作用分的,看代码的话,基本都是adapter或者bridge
而且我一向认为模式是重构出来的
而且我一向认为模式是重构出来的
qingzi2534
2007-01-17
akun_007 写道
是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?
你一个“粗略”把适配器的精髓都去掉了,如果这么简单的认为,就没有这么多设计模式了。
如果用适配器这种模式,可以降低代码的耦合度。
比如,从Main类的源代码就完全看不出有Banner类,showWithParen方法,showWithAster方法。
换个说法,如果你要改输出的格式,只需要改PrintBanner类就可以了,Main类完全不用改变。
cui09
2007-01-17
在你的例子中,PrintBanner和Print接口所提供的方法虽然相同,但在某些情形下,PrintBanner类的方法可能会比较多,这个例子的用意很明显,是先将其指定到Print类型变量后再使用,其实是要利用Print接口的方法,而不是PrintBanner类的方法。
akun_007
2007-01-17
是不是可以粗略的认为,一个子类继承他父类的同时又实现了某个接口(它同时就具有了父类和接口的特性),就可以说这个子类是他父类和这个接口的“适配器类”了?
qingzi2534
2007-01-17
本示例中,在建立PrintBanner类的对象时,把它指定到Print类变量,即:
print p = new PrintBanner("Hello");
为什么不采取下面这个制定到PrintBanner类变量的做法呢?
PrintBanner p = new PrintBanner("Hello");
print p = new PrintBanner("Hello");
为什么不采取下面这个制定到PrintBanner类变量的做法呢?
PrintBanner p = new PrintBanner("Hello");
wenjixiao
2007-01-16
见不着女的,见着一个,支持一下。
- 浏览: 174679 次
- 性别:

- 来自: 烟台

- 详细资料
搜索本博客
我的相册
200804090708271400855637
共 39 张
共 39 张
最近加入圈子
最新评论
-
2007,年终总结
qingzi2534 写道08年一开始计划就完全没有执行,早上起不来,没有时间吃 ...
-- by 刑天战士 -
2007,年终总结
qingzi2534 写道08年一开始计划就完全没有执行,早上起不来,没有时间吃 ...
-- by weiqingfei -
2007,年终总结
08年一开始计划就完全没有执行,早上起不来,没有时间吃早餐,晚上连续熬夜到12点 ...
-- by qingzi2534 -
2007,年终总结
曾经早上8点干起然后干到转钟一直干了半年,最后身体几乎搞垮的人飘过。。。
-- by zhangfeiyu2005 -
2007,年终总结
qingzi2534 写道 每天都要在2点前睡觉 很好奇,到底是几点上班的 ...
-- by fqtrnt






评论排行榜