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

来源:互联网 发布:软件破解教程 编辑:程序博客网 时间:2024/05/30 07:14


解释

1.1  定义

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


1.2  分析

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

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

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

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


代码分析

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 + "斤大米");}@Overridepublic 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 总结

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

 

 

 

1 0
原创粉丝点击