一、什么是适配器模式:

  把一个接口变成另外一个接口,使得原本因接口不匹配无法一起工作的两个类一起工作。

二、适配器模式的分类和结构:

  适配器模式有类的适配器模式和对象的适配器模式两种。

  1、类的适配器模式:

  有时候为了使用现有的类,但是此类接口不符合需求时,需要将一个类的接口与其他类的接口进行组合,达到我们的使用需求。类的的适配器模式就是把被适配的类的API转换成目标类的API,静态结构图如下图所示:

  Target希望即使用sampieOperation1()又使用sampieOperation2(),但是很显然Adaptee并不满足要求,现在只能通过一个中间环节Adapter,继承Adaptee类,提供一个sampieOperation2()方法,满足客户端的需求,达到Target的效果。

  (1)Target(目标抽象类):所期待的接口。注意,类的适配器模式中,目标不可以是类,而是接口。

  (2)Adapter(适配器类):模式的核心类,将原接口转换成目标接口,必须是具体类。

  (3)Adaptee(适配者类):需要适配的接口。

  (4)Client(客户类):针对目标抽象类编程,调用其定义的方法。

 /**
* 达到客户端要求的目标角色
*
* @author:Zhou_DX
* @sine: 2019年3月25日 下午7:57:05
* @Description:
*/
public interface TargetClass {
/**
* 下单(源类中有的方法)
*/
public void downloaOrder(); /**
* 发货(源类中没有的方法)
*/
public void send(); }
 /**
* 源适配器
*
* @author:Zhou_DX
* @sine: 2019年3月25日 下午8:00:59
* @Description:
*/
public class AdapteeClass {
/**
* 下单(源类中有的方法)
*/
public void downloaOrder() {
System.out.println("下载订单");
}
}
 /**
* 类的适配器
*
* @author:Zhou_DX
* @sine: 2019年3月25日 下午8:02:43
* @Description:
*/
public class AdapterClass extends AdapteeClass implements TargetClass {
/**
* 发货
*/
@Override
public void send() {
// TODO Auto-generated method stub
System.out.println("发货");
}
}

  

  2.对象适配器模式:

  同样的,对象适配器也是将一个类的API转换成我们所期待的API,不同的是,类的适配器中,通过继承得到目标类,而对象适配器则是通过封装,在Adapter中封装Adaptee的一个对象,将Target与Adaptee连接起来。结构如图所示:

 /**
* 达到客户端要求的目标角色
*
* @author:Zhou_DX
* @sine: 2019年3月25日 下午7:57:05
* @Description:
*/
public interface TargetObject {
/**
* 下单(源类中有的方法)
*/
public void downloaOrder(); /**
* 发货(源类中没有的方法)
*/
public void send(); }
 /**
* 源适配器
*
* @author:Zhou_DX
* @sine: 2019年3月25日 下午8:00:59
* @Description:
*/
public class AdapteeObject {
/**
* 下单(源类中有的方法)
*/
public void downloaOrder() {
System.out.println("下载订单");
}
}
 /**
* 类的适配器
*
* @author:Zhou_DX
* @sine: 2019年3月25日 下午8:02:43
* @Description:
*/
public class AdapterObject implements TargetObject {
private AdapteeObject adapter_class; public AdapterObject(AdapteeObject adapteeClass) {
super();
this.adapter_class = adapteeClass; } /**
* 发货
*/
@Override
public void send() {
// TODO Auto-generated method stub
System.out.println("发货");
} /*
* (non-Javadoc)
*
* @see adapter_object.TargetClass#downloaOrder()
*/
@Override
public void downloaOrder() {
// TODO Auto-generated method stub
adapter_class.downloaOrder();
}
}

  对象适配器的优点:

  同一个适配器可以将源和它的子类都适配到目标接口。

三、类适配器和对象适配器的比较:

  类适配器中,适配器类通过实现Target接口并继承Adaptee类,实现适配目的。

 public class Adapter extends Adaptee implements Target
{
//request()方法为Target接口里所定义的方法
public void request()
{
specificRequest();//该方法为Adaptee类里定义的方法
}
}

  对象适配器中,适配器类通过继承Target类并关联一个Adaptee对象,实现适配目的。

 public class Adapter extends Target
{
private Adaptee adaptee;//所关联的适配者类的对象
public Adapter(Adaptee adaptee)
{
this.adaptee=adaptee;
}
public void request()
{
adaptee.specificRequest();
}
}

Java 适配器(Adapter)模式的更多相关文章

  1. 设计模式--适配器(Adapter)模式

    今天学习另一个设计模式,适配器(Adapter)模式,这是一个共同方向,但有特殊要求,就应用到此设计模式.写到这里,想起很久以前,有写过一篇<ASP.NET的适配器设计模式(Adapter)&g ...

  2. 【原】模式之-适配器Adapter模式

    适配器Adapter模式 适配器模式(Adapter Pattern)把一个类的接口变换成客户端所期待的的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 模式所涉及的角色有 ...

  3. java演示适配器(adapter)模式

    为什么要使用模式: 模式是一种做事的一种方法,也即实现某个目标的途径,或者技术. adapter模式的宗旨就是,保留现有类所提供的服务,向客户提供接口,以满足客户的需求. 类适配器:客户端定义了接口并 ...

  4. Java 实现适配器(Adapter)模式

    平时我们会常常碰到这种情况,有了两个现成的类,它们之间没有什么联系.可是我们如今既想用当中一个类的方法.同一时候也想用另外一个类的方法.有一个解决方法是.改动它们各自的接口.可是这是我们最不愿意看到的 ...

  5. java设计模式—Adapter模式

    1.核心意图:     将一个类的接口转换成客户希望的另外一个接口,从而使得原本由于接口不兼容而不能一起工作的类可以一起工作. 该模式的目标是通过一个代理(这里是Adapter),在原来的类(Adap ...

  6. 适配器(Adapter)模式

    适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的一些其他名称:变压器模式.转换器模式.包装(Wrapper)模式.适 ...

  7. 设计模式C++描述----06.适配器(Adapter)模式

    一. 定义 适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. Adapter 模式的两种类别:类模式和对象模式. 二. 举例说明 实际中 ...

  8. 2、适配器 adapter 模式 加个"适配器" 以便于复用 结构型设计模式

    1.什么是适配器模式? 适配器如同一个常见的变压器,也如同电脑的变压器和插线板之间的电源连接线,他们虽然都是3相的,但是电脑后面的插孔却不能直接插到插线板上. 如果想让额定工作电压是直流12伏特的笔记 ...

  9. 漫谈设计模式(一):代理(Proxy)模式与适配器(Adapter)模式对比

    1.前言 为什么要将代理模式与适配器模式放在一起来说呢?因为它们有许多的共同点,当然也有一些不同的地方.首先两者都是属于结构型模式.结构型模型是这样定义的: 结构型模式涉及到如何组合类和类以获得更大的 ...

  10. Adapter(适配器)模式

    1. 概述: 接口的改变,是一个需要程序员们必须(虽然很不情愿)接受和处理的普遍问题.程序提供者们修改他们的代码;系统库被修正;各种程序语言以及相关库的发展和进化.  例子1:iphone4,你即可以 ...

随机推荐

  1. 使用Scala IDE for Eclipse遇到build errors错误的解决办法

    在编写第一个Scala语言的Spark程序时,在Scala IDE for Eclipse中运行程序时出现“Project XXXX contains build errors, Continue l ...

  2. Java开发必须掌握的线上问题排查命令

    作为一个合格的开发人员,不仅要能写得一手还代码,还有一项很重要的技能就是排查问题.这里提到的排查问题不仅仅是在coding的过程中debug等,还包括的就是线上问题的排查.由于在生产环境中,一般没办法 ...

  3. 深入理解es6-Promise对象

    前言     在之前翻博客时,看到promise,又重读了一边,突然发现理解很浅,记的笔记也不是很好理解,又重新学习promise,加深理解,学以致用     在promise出来之前,js常用解决异 ...

  4. Python调用ansible API系列(二)执行adhoc和playbook

    执行adhoc #!/usr/bin/env python # -*- coding: utf-8 -*- import sys from collections import namedtuple ...

  5. WebGL three.js学习笔记 纹理贴图模拟太阳系运转

    纹理贴图的应用以及实现一个太阳系的自转公转 点击查看demo演示 demo地址:https://nsytsqdtn.github.io/demo/solar/solar three.js中的纹理 纹理 ...

  6. okio:定义简短高效

    欢迎关注公众号,第一时间获取最新文章: 本篇目录 一.前言 okio是大名鼎鼎的square公司开发出来的,其是okhttp的底层io操作库,既然已经有java原生的io库为什么还要自己费尽开发一套呢 ...

  7. Spring学习(一):理解IoC容器

    序言 记得刚毕业那会儿,出来招工作被问到Spring的核心时,都觉得简单的一笔,直接说不就是IoC(控制反转)和DI(依赖注入)么,然后省略一万字对两个名词的解释.最近空来整理了一下Spring中Io ...

  8. java监听器简述

    监听器的概念 所谓监听器就是对内置对象的状态或者属性变化进行监听并且做出反应的特殊servlet,并且也需要在web.xml文件中进行相关配置. 内置对象的状态变化:初始化和销毁,也就是说当内置对象初 ...

  9. 结合Mybatis源码看设计模式——外观模式

    定义 提供了一个统一的接口,用来访问子系统中一群接口 适用场景 子系统复杂,增加外观模式提供简单调用接口 构建多层系统结构,用外观对象作为每层入口 详解 外观模式,主要理解外观.通俗一点可以认为这个模 ...

  10. headfirst设计模式(7)—命令模式

    一.前言 什么是命令模式? 在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”.但在某些场合,比如要对行为进行“记录.撤销/重做.事务”等处理,这种无法抵御变化的紧耦合是不合适的.在这 ...