一、模式解析

  适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。  

  也就是说,如果已经写好了一个接口,但是又来了一种截然不同的接口,如果使用新接口可能导致原来大面积的修改,那么可以考虑使用适配器模式将新的接口适配旧接口。

  适配器接口比较简单,而且适配一词现实中用的也比较多,如电源适配器,都是一个道理,所以直接上代码

二、模式代码

1、原有接口

package adapter.patten;

public interface Target {
public void request();
}

2、新的方法

package adapter.patten;

public class Adaptee {

    public void specificRequest(){
System.out.println("我正在执行specific 方法");
}
}

3、适配器

package adapter.patten;

public class Adapter implements Target {
public Adaptee adaptee; public void request(){
adaptee=new Adaptee();
adaptee.specificRequest();
}
}

4、客户端代码

package adapter.patten;

public class Client {
public static void main(String[] args) {
Target target=new Adapter();
target.request();
} }

5、执行结果

我正在执行specific 方法

三、应用场景

在工作中遇到平台需要使用支付平台进行支付,可能存在情况是原来平台已经接入了支付宝支付,各种接口包括:支付、退货、查询、对账都已经开发完成,突然客户说想改为财付通支付方式,那么已经写好的代码均需要变化,此时就需要使用适配器进行转化。

四、场景代码

1、定义支付方式,调用此接口,可以完成支付

package adapter.example;

public interface IPay {
public void pay();
}

2、支付宝支付流程编写

package adapter.example;

public class AliPay implements IPay {

    @Override
public void pay() {
System.out.println("通过支付宝进行支付");
} }

3、财付通提供的支付方式,接口与已经定义的不同

package adapter.example;

public class TenPay {
public void tenPay(){
System.out.println("通过财付通进行支付");
}
}

4、编写适配器,进行转化

package adapter.example;

public class TenPayAdapter implements IPay {
TenPay tenPay;
@Override
public void pay() {
if(tenPay==null){
tenPay=new TenPay();
}
tenPay.tenPay();
} }

5、客户端调用

package adapter.example;

public class Client {
public static void main(String[] args) {
// IPay pay=new AliPay();
IPay pay=new TenPayAdapter();
pay.pay();
}
}

五、说明

1、适配器模式是当两种接口无法兼容的情况下采取的被动方式,如果可以通过设计,避免出现此种情况,那么应尽量少使用适配器模式

2、适配器模式可以完成对象的延迟创建,如TenPayAdapter 中,直到支付方法被调用,才生成TenPay的实例

[工作中的设计模式]适配器模式adapter的更多相关文章

  1. [工作中的设计模式]享元模式模式FlyWeight

    一.模式解析 Flyweight在拳击比赛中指最轻量级,即“蝇量级”或“雨量级”,这里选择使用“享元模式”的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持 ...

  2. [工作中的设计模式]原型模式prototype

    一.模式解析 提起prototype,最近看多了js相关的内容,第一印象首先是js的原型 var Person=function(name){ this.name=name; } Person.pro ...

  3. [工作中的设计模式]解释器模式模式Interpreter

    一.模式解析 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 以上是解释器模式的类图,事实上我 ...

  4. [工作中的设计模式]中介模式模式Mediator

    一.模式解析 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 中介模式又叫调停者模式,他有如下特点: 1.有多个系统或者对 ...

  5. [工作中的设计模式]责任链模式chain

    一.模式解析 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知 ...

  6. [工作中的设计模式]迭代子模式Iterator

    一.模式解析 迭代子模式又叫游标(Cursor)模式,是对象的行为模式.迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象 1.迭代子模式一般用于对集合框架的访问,常用的集合框架为lis ...

  7. [工作中的设计模式]策略模式stategy

    一.模式解析 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 策略模式的关键点为: 1.多种算法存在 2.算法继承同样的接口 ...

  8. 设计模式 - 适配器模式(adapter pattern) 具体解释

    适配器模式(adapter pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 适配器模式(adapter pattern): 将一个类的接 ...

  9. 设计模式 - 适配器模式(adapter pattern) 枚举器和迭代器 具体解释

    适配器模式(adapter pattern) 枚举器和迭代器 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考适配器模式(adapter patter ...

随机推荐

  1. 【leetcode】Remove Linked List Elements(easy)

    Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> 2 --& ...

  2. 【leetcode】Binary Tree Maximum Path Sum (medium)

    Given a binary tree, find the maximum path sum. The path may start and end at any node in the tree. ...

  3. 【leetcode】Isomorphic Strings(easy)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  4. 基于SSH2的OA项目1.0_20161206_需求分析与框架搭建

    1. SSH项目 OA项目,办公自动化,将公司的数据,文档,流程实现在系统中的管理. 降低人员交流过程中的成本.提高办公的效率. 2 .系统管理 主要实现系统权限的管理,不同的用户登陆后看到菜单项不一 ...

  5. Java 回调机制的理解

    // 在接口中声明一个处理耗时操作结果的回调方法. // Local 实现这个接口,实现处理耗时操作结果的回调方法. // Local 获得 Remote 对象,在子线程中调用 Remote 的处理耗 ...

  6. NYOJ_37.回文字符串 (附滚动数组)

    时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问 ...

  7. Linux如何查看与/dev/input目录下的event对应的设备

    1.查看当前的设备 dev/input/ 2.查看设备的名称 cat /proc/bus/input/devices

  8. Android消息推送怎么实现?

    在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是Android平台上实现起来却相 ...

  9. MSSQL数据的批量插入

    一.概述: 对于数据的批量插入操作似乎成了某些大数据量操作的必用手段,MSSQL也提供了一些数据批量插入的操作方法,先将这些方法汇总,以便于下次用到使用.面对数据的批量插入操作,我们也应该考虑一个问题 ...

  10. 【131031】struts 1 中 <html:form>

    <DIV>来看看 使用 ActionForm 这个主题,当时使用了一个静态表单网页:<BR>* form.htm<BR><BR><BR>&l ...