`
风雪涟漪
  • 浏览: 499195 次
  • 性别: Icon_minigender_1
  • 来自: 大连->北京
博客专栏
952ab666-b589-3ca9-8be6-3772bb8d36d4
搜索引擎基础(Search...
浏览量:8825
Ae468720-c1b2-3218-bad0-65e2f3d5477e
SEO策略
浏览量:17827
社区版块
存档分类
最新评论

适配器模式 追MM

阅读更多

情人节快到了,应该给女朋友送礼物了。借此机会恶搞下适配器模式

引用

适配器模式:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。

 

需求是,原先送给女朋友一辆自行车,作为代步工具,现在有点钱了准备升级一下,到摩托车。。。。总结。。也许它能作为代步工具,不一定是自行车,有可能是个像自行车的摩托车。。。。

 

看一下自行车接口

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()));


	}
}
 

结果如下:

 

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

 

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

 

最后祝大家情人节快乐。

 

 

 

 

分享到:
评论
15 楼 ianzhang 2009-11-17  
<div class="quote_div">
<p> </p>
<p>看一下自行车接口</p>
<pre name="code" class="java">package adpter.demo;

public interface Bike {
<span style="background-color: #ffff99;">public void go();</span>
}</pre>
<p> </p>
<p>在隆重介绍新买的摩托车。。</p>
<pre name="code" class="java">package adpter.demo;

public interface Moto {
<span style="background-color: #ffff99;">public void go();</span>
}
</pre>
   
<p>发现了接口是自行车,现在遇到麻烦了。。因为<span style="font-size: medium;"><strong><span style="color: #ff0000;">自行车和摩托车接口不同</span></strong></span>。。。所以我需要一个适配器来解决。</p>
</div>
<p>楼主的示例中,自行车和摩托车的接口是一样的,</p>
<p>个人觉得这个例子不能说明adapter的意图,并没有起到调整接口的目的,而且<span style="color: #ff0000; font-size: medium;"><strong>类型适配</strong></span></p>
14 楼 peirubing 2009-10-29  
uml图箭头好像反了吧
13 楼 sunwenran 2009-10-23  
适配器模式的其中一种
接口适配
12 楼 zhangyou1010 2009-10-22  
看第一遍的时候不理解,再看下很好的理解了。呵呵。
11 楼 tianmo2008 2009-10-06  
呵呵,是对象适配器啊.
楼主的例子确实是对象适配器的实际的实践,
清楚的交代了适配器在旧系统中引入新功能所起的重要作用,也是适配器模式的价值所在啊。
10 楼 chensunhao 2009-09-20  
楼主的例子说的很形象,容易理解,谢谢
9 楼 yepeiwen520 2009-09-18  
写的很好,体现了面向接口编程的灵活性,也诠释了Adapter模式如何使两个不相关的接口一起协同工作。

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

还有,Adapter模式与桥接模式代码结构上真是相似,可能他们的出发点或者说所解决的问题不同吧,本质区别是什么呢?
  楼主怎么理解的
8 楼 joknm 2009-09-01  
呵呵。赞同。不过这种情况是逼不得已的情况下用的吧。一开始设计用继承来搞车应该很容易扩展吧。
7 楼 piao_bo_yi 2009-08-27  


6 楼 piao_bo_yi 2009-08-27  
像桥接模式...
5 楼 andot 2009-02-13  
楼主的例子真是很妙啊,把问题一下子就说明白了!
4 楼 mewleo 2009-02-12  
静态语言的模式忘记的差不多了。
3 楼 wangneng_001 2009-02-12  
不错,很容易理解
2 楼 leeldy 2009-02-12  
赞一个,说得相当的形象。。。
向上转型这东西在这里用得很明显啊。。。
1 楼 peachtao 2009-02-12  
说得很透彻

相关推荐

Global site tag (gtag.js) - Google Analytics