论坛首页 Java企业应用论坛

适配器模式 追MM

浏览 6702 次
精华帖 (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()));


	}
}
 

结果如下:

 

自行车 速度很慢!!!
摩托车 速度很快!!!!!!

 

已经完全符合我女朋友的需求了。

 

最后祝大家情人节快乐。

 

 

 

 

   发表时间:2009-02-12  
说得很透彻
0 请登录后投票
   发表时间:2009-02-12  
赞一个,说得相当的形象。。。
向上转型这东西在这里用得很明显啊。。。
0 请登录后投票
   发表时间:2009-02-12  
不错,很容易理解
0 请登录后投票
   发表时间:2009-02-12  
静态语言的模式忘记的差不多了。
0 请登录后投票
   发表时间:2009-02-13  
楼主的例子真是很妙啊,把问题一下子就说明白了!
0 请登录后投票
   发表时间:2009-08-27  
像桥接模式...
0 请登录后投票
   发表时间:2009-08-27  


  • 大小: 167.1 KB
  • 大小: 167.1 KB
0 请登录后投票
   发表时间:2009-09-01  
呵呵。赞同。不过这种情况是逼不得已的情况下用的吧。一开始设计用继承来搞车应该很容易扩展吧。
0 请登录后投票
   发表时间:2009-09-18  
写的很好,体现了面向接口编程的灵活性,也诠释了Adapter模式如何使两个不相关的接口一起协同工作。

  有的文章中描述的Adapter模式是这样写的:Adapter模式旨在改变一个接口以适应另一个接口的工作。我想了很久,没理解 改变接口 的说法,我觉得接口并没有改变啊。 这里楼主用了 转换 一词就比较容易理解了,这是个人体会,不知道有谁对 改变接口 的说法理解的比较透彻,可以分享一下~~

还有,Adapter模式与桥接模式代码结构上真是相似,可能他们的出发点或者说所解决的问题不同吧,本质区别是什么呢?
  楼主怎么理解的
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics