锁定老帖子 主题:适配器模式 追MM
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-11
最后修改:2009-02-11
情人节快到了,应该给女朋友送礼物了。借此机会恶搞下适配器模式引用 适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
需求是,原先送给女朋友一辆自行车,作为代步工具,现在有点钱了准备升级一下,到摩托车。。。。总结。。也许它能作为代步工具,不一定是自行车,有可能是个像自行车的摩托车。。。。
看一下自行车接口 package adpter.demo; public interface Bike { public void go(); }
再看看我女朋友现有的自行车 package adpter.demo; public class RedBike implements Bike{ public void go(){ System.out.println("自行车 速度很慢!!!"); } } 不过自行车真的太慢了。。。
在隆重介绍新买的摩托车。。 package adpter.demo; public interface Moto { public void go(); } package adpter.demo; public class RedMoto implements Moto{ public void go() { System.out.println("摩托车 速度很快!!!!!!"); } }
现在我女朋友天天上班骑自行车如下。。。。
package adpter.demo; public class ChasingGirl { public void gotoCompany(Bike bike){ bike.go(); } } 发现了接口是自行车,现在遇到麻烦了。。因为自行车和摩托车接口不同。。。所以我需要一个适配器来解决。 package adpter.demo; public class MotoAdapter implements Bike{ private Moto moto; public MotoAdapter(Moto moto){ this.moto=moto; } public void go() { moto.go(); } } 测试一下 package adpter.demo; public class ChasingGirl { public void gotoCompany(Bike bike){ bike.go(); } public static void main(String[] args){ ChasingGirl chasingGirl = new ChasingGirl(); chasingGirl.gotoCompany(new RedBike()); chasingGirl.gotoCompany(new MotoAdapter(new RedMoto())); } } 结果如下:
自行车 速度很慢!!!
已经完全符合我女朋友的需求了。
最后祝大家情人节快乐。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-12
说得很透彻
|
|
返回顶楼 | |
发表时间:2009-02-12
赞一个,说得相当的形象。。。
向上转型这东西在这里用得很明显啊。。。 |
|
返回顶楼 | |
发表时间:2009-02-12
不错,很容易理解
|
|
返回顶楼 | |
发表时间:2009-02-12
静态语言的模式忘记的差不多了。
|
|
返回顶楼 | |
发表时间:2009-02-13
楼主的例子真是很妙啊,把问题一下子就说明白了!
|
|
返回顶楼 | |
发表时间:2009-08-27
像桥接模式...
|
|
返回顶楼 | |
发表时间:2009-08-27
|
|
返回顶楼 | |
发表时间:2009-09-01
呵呵。赞同。不过这种情况是逼不得已的情况下用的吧。一开始设计用继承来搞车应该很容易扩展吧。
|
|
返回顶楼 | |
发表时间:2009-09-18
写的很好,体现了面向接口编程的灵活性,也诠释了Adapter模式如何使两个不相关的接口一起协同工作。
有的文章中描述的Adapter模式是这样写的:Adapter模式旨在改变一个接口以适应另一个接口的工作。我想了很久,没理解 改变接口 的说法,我觉得接口并没有改变啊。 这里楼主用了 转换 一词就比较容易理解了,这是个人体会,不知道有谁对 改变接口 的说法理解的比较透彻,可以分享一下~~ 还有,Adapter模式与桥接模式代码结构上真是相似,可能他们的出发点或者说所解决的问题不同吧,本质区别是什么呢? 楼主怎么理解的 |
|
返回顶楼 | |