一、模式解析

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

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

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

二、模式代码

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. 【XLL API 函数】xlGetName

    以字符串格式返回 DLL 文件的长文件名. 原型 Excel12(xlGetName, LPXLOPER12 pxRes, 0); 参数 这个函数没有参数 属性值和返回值 返回文件名和路径 实例 \S ...

  2. struts2封装客户端数据到Action

    1.在Action中定义简单数据类型的属性 给Action定义简单类型的属性,封装客户端请求的数据 简单类型:String,基本类型和对应的引用类型 只要保证客户端请求的参数名称和Action的属性名 ...

  3. mongodb3.2配置文件yaml格式 详解

    mongodb3.x版本后就是要yaml语法格式的配置文件,下面是yaml配置文件格式如下:官方yaml配置文件选项参考:https://docs.mongodb.org/manual/ ... #c ...

  4. mongodb启动后台服务

    将MongoDB部署在服务器机子上时mongodb的实例应为后台服务进行的方式运行,而非前台进程,否则远程会话一关闭mongodb也跟着关闭了.本文介绍mongodb后台服务进程开启和关闭的操作. 开 ...

  5. 浏览器方法及代码打包成APP的

    <script src=" http://static.ydbimg.com/API/YdbOnline.js" type="text/javascript&quo ...

  6. Mysql获取时间

    select now() 当前时间;   SELECT curdate() 当天日期; select date_sub(curdate(),interval 1 day) 前一天日期; select ...

  7. UVA 10252

    按照字典序输出最长公共子序列 #include<time.h> #include <cstdio> #include <iostream> #include< ...

  8. 三、jQuery--Ajax基础--Ajax全接触--Ajax在JS中的应用

    Ajax的全称:Asynchronous JavaScript And XML(异步的 JavaScript 和 XML). Ajax不是某种编程语言,是一种在无需重新加载整个网页的情况下能够更新部分 ...

  9. Jquery.Datatables dom表格定位

    Datatables会添加一些控制元素在表格的周围,比如默认状态下改变每页显示条数(l)的空间在左上角,即使搜索框(f)在右上角,表格的信息(i)显示在左下角,分页控件(p)显示在右下角. 这些控件在 ...

  10. 重温WCF之消息拦截与篡改(八)

    我们知道,在WCF中,客户端对服务操作方法的每一次调用,都可以被看作是一条消息,而且,可能我们还会有一个疑问:如何知道客户端与服务器通讯过程中,期间发送和接收的SOAP是什么样子.当然,也有人是通过借 ...