设计模式6——适配器模式
来源:互联网 发布:软件破解教程 编辑:程序博客网 时间:2024/05/30 07:14
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 + "斤大米");}@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
- 设计模式(6)——适配器模式
- 设计模式6——适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式—适配器模式
- 设计模式——适配器
- 每日设计模式——适配器模式
- 浅谈设计模式——适配器模式
- 设计模式——适配器模式(Adapter)
- 设计模式—适配器模式—C++
- JAVA设计模式——适配器模式
- java设计模式——适配器模式
- 【大话设计模式】——适配器模式
- Storm-源码分析汇总
- 当我达到光速
- MQ消息中间件
- VS2010 + Qt5.3.2 中文显示乱码的问题.
- WM_DEVICECHANGE message
- 设计模式6——适配器模式
- matlab 的括号
- stm32SysTick(补充)
- 用 VNC 远程图形化登录 Linux (VNC 全屏显示,F8切换全屏)
- case when和decode比较
- C++ 对象中的方法:getline
- spark源码解读
- 黑马程序员——OC语言(一)--基本语法
- Spring事务管理(较全)