频道栏目
首页 > 资讯 > 其他综合 > 正文

设计模式6——适配器模式

14-09-24        来源:[db:作者]  
收藏   我要投稿


1 解释

1.1 定义

将一个类的接口转换成客户希望的另外一个接口。


1.2 分析

定义中重点是“转换”,以下的例子都体现了适配器的原理:

1. 出国旅游,人民币必须兑换成外币才能正常的进行流通和使用。

2. 各用电设备使用电压都不一样,需要用一个变压器提供对应的电压。

3. 各国语言不一样,所以出现了翻译这么一个职业,帮助大家顺畅的沟通。


2 代码分析

2.1 买大米的故事

信用卡刷卡消费,当你在国外消费的时候,他会先扣除对应的外币,然后再转换成本国的货币扣除。这样就不需要我们再去兑换货币了,很方便。

参考上面的实例,一个美国朋友拿着一张美国卡在中国买大米。可是系统中只有美元买美国大米的功能,还没有美元买中国大米的功能。那我们就实现一个呗,如下图所示。

目标接口,客户端需要的接口:

public interface ActionTarget {
	public void buyRiceInDollars(int pDollarValue);

	public void buyRiceInRMB(int pRMBValue);
}

需要适配的类:

public class RMBAdapee {
	public void buyRiceInRMB(int pRMBValue) {
		int amount = pRMBValue / 2; // 购买的动作可以放到接口或者父类中。
		System.out.println("在中国,您用" + pRMBValue + "元人民币可以购买" + amount + "斤大米");
	}
}


适配器,该模式的核心:

public class DollarAdapter implements ActionTarget {

	private RMBAdapee mRMBAdapee;

	public DollarAdapter(RMBAdapee pRMBAdapee) {
		mRMBAdapee = pRMBAdapee;
	}

	public void buyRiceInDollars(int pValue) {
		int amount = pValue / 1;	//购买的动作可以放到接口或者父类中。
		System.out.println("在美国,您用" + pValue + "美元可以购买" + amount + "斤大米");
	}

	@Override
	public void buyRiceInRMB(int pValue) {
		int rmbValue = pValue * 6;
		System.out.println(pValue + "美元可以兑换" + rmbValue + "元人民币");
		mRMBAdapee.buyRiceInRMB(rmbValue);
	}

}

从上面的buyRiceInRMB函数可以看出来,我们必须传入人民币才能使用这个函数。于是我们在适配器里面做一个货币的转换,然后再调用这个函数,这样就实现了用美元买中国大米的功能。

测试类:

public class AdapterTest {
	public static void main(String[] args) {
		int dollar = 10;
		DollarAdapter adapter = new DollarAdapter(new RMBAdapee());
		adapter.buyRiceInDollars(dollar);
		adapter.buyRiceInRMB(dollar);
	}
}

代码下载地址:https://github.com/bird7310/DesignPatternExample.git

包名:com.ahacool.designpattern.adapter


3 总结

本文介绍的很简单,因为这个模式很常见,只要大家理解原理即可,其他深入的学习可以查看其他的资料和书籍。

相关TAG标签
上一篇:Android 输入法问题 解决三星s5830i或华为低端机输入法崩溃问题
下一篇:Hdu 4419 Colourful Rectangle(线段树扫描线)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站