Java设计模式(八) 适配器模式

  原创文章,转载请务必将下面这段话置于文章开头处。

  本文转发自Jason’s Blog原文链接 http://www.jasongj.com/design_pattern/adapter/

适配器模式介绍

适配器模式定义

适配器模式(Adapter Pattern),将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

适配器模式类图

适配器模式类图如下

适配器模式角色划分

  • 目标接口,如上图中的ITarget
  • 具体目标实现,如ConcreteTarget
  • 适配器,Adapter
  • 待适配类,Adaptee

实例解析

本文代码可从作者Github下载

目标接口

package com.jasongj.target;

public interface ITarget {

  void request();

}

目标接口实现

package com.jasongj.target;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ConcreteTarget implements ITarget {

  private static Logger LOG = LoggerFactory.getLogger(ConcreteTarget.class);

  @Override
  public void request() {
    LOG.info("ConcreteTarget.request()");
  }

}

待适配类,其接口名为onRequest,而非目标接口request

package com.jasongj.adaptee;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jasongj.target.ConcreteTarget;

public class Adaptee {

  private static Logger LOGGER = LoggerFactory.getLogger(ConcreteTarget.class);

  public void onRequest() {
    LOGGER.info("Adaptee.onRequest()");
  }

}

适配器类

package com.jasongj.target;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jasongj.adaptee.Adaptee;

public class Adapter implements ITarget {

  private static Logger LOG = LoggerFactory.getLogger(Adapter.class);

  private Adaptee adaptee = new Adaptee();

  @Override
  public void request() {
    LOG.info("Adapter.request");
    adaptee.onRequest();
  }

}

从上面代码可看出,适配器类实际上是目标接口的类,因为持有待适配类的实例,所以可以在适配器类的目标接口被调用时,调用待适配对象的接口,而客户端并不需要知道二者接口的不同。通过这种方式,客户端可以使用统一的接口使用不同接口的类。

package com.jasongj.client;

import com.jasongj.target.Adapter;
import com.jasongj.target.ConcreteTarget;
import com.jasongj.target.ITarget;

public class AdapterClient {

  public static void main(String[] args) {
    ITarget adapter = new Adapter();
    adapter.request();

    ITarget target = new ConcreteTarget();
    target.request();
  }

}

适配器模式适用场景

  • 调用双方接口不一致且都不容易修改时,可以使用适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作
  • 多个组件功能类似,但接口不统一且可能会经常切换时,可使用适配器模式,使得客户端可以以统一的接口使用它们

适配器模式优缺点

观察者模式优点

  • 客户端可以以统一的方式使用ConcreteTarget和Adaptee
  • 适配器负责适配过程,而不需要修改待适配类,其它直接依赖于待适配类的调用方不受适配过程的影响
  • 可以为不同的目标接口实现不同的适配器,而不需要修改待适配类,符合开放-关闭原则

适配器模式与OOP原则

已遵循的原则

  • 依赖倒置原则
  • 迪米特法则
  • 里氏替换原则
  • 接口隔离原则
  • 单一职责原则
  • 开闭原则

未遵循的原则

  • NA

Java设计模式系列

  • Java设计模式(一) 简单工厂模式不简单
  • Java设计模式(二) 工厂方法模式
  • Java设计模式(三) 抽象工厂模式
  • Java设计模式(四) 观察者模式
  • Java设计模式(五) 组合模式
  • Java设计模式(六) 代理模式 VS. 装饰模式
  • Java设计模式(七) Spring AOP JDK动态代理 vs. cglib
  • Java设计模式(八) 适配器模式
时间: 2024-11-07 01:13:43

Java设计模式(八) 适配器模式的相关文章

Java设计模式之适配器模式(Adapter Pattern)

Adapter Pattern的作用是在不改变功能的前提下转换接口.Adapter分为两类,一类是Object Adapter, 另一类是Class Adapter.由于Class Adapter的实现需要用到多继承,而Java不支持多继承,所以这里只关注Object Adapter. 在JDK1.5之前是没有 java.util.Iterator 接口的,java.util.Enumeration 接口起着 Iterator 的作用.那么如果我们需要维护一些年代比较久远的代码,可能就会面临着没

Java设计模式----初识适配器模式

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3930271.html 联系方式:[email protected] [正文] 我们知道,Android中最重要也是最难用的UI控件就是ListView列表控件,而要想灵活运用它,则必须要用到适配器adapter,所以,我觉得还是很有必要来学习一下Java当中的适配器模式(不管以后能不能用到),毕竟

Java设计模式之适配器模式(Adapter)

转载:<JAVA与模式>之适配器模式 这个总结的挺好的,为了加深印象,我自己再尝试总结一下 1.定义: 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.      (太官方了,不太好理解, 其实就是要用到两个不相关的类/接口,但是又没有源代码,或者不想修改源代码,而增加一个类来完成合并使用的目的) 2.实现这个目的有两个方法,继承或者组合 2.1.使用继承(就是所谓的类适配器模式) 2.2.使用组合(所谓的对象适配器模式)

Java设计模式应用——适配器模式

性能监控系统中,存在告警模块和报表模块,告警结果和报表结果都需要导出. 由于告警开发进度较快,已经实现了excel导出.csv导出.zip导出功能,现在报表需要excel导出.csv导出.pdf导出功能,该如何做呢? 显然,报表不会重复开发excel导出,csv导出代码,只需要增加pdf导出代码即可,这种情况下使用适配器模式再好不过. 一. 类适配器模式 直接的想法,继承告警导出类,增加pdf导出代码,这也就是类适配器模式. 1. 告警导出类 package com.coshaho.learn.

Java设计模式-Adapter(适配器模式)

适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作. 适配器模式的结构 适配器模式有类的适配器模式和对象的适配器模式两种不同的形式. 类适配器模式 类的适配器模式把适配的类的API转换成为目标类的API. 在上图中可以看出,Adaptee类并没有sampleOperation2()方法,而客户端则期待这个方法.为使客户端能够使用 Adaptee类,提供一个中间环节,即类Adapter,把Adaptee的API与Target类的AP

java设计模式之六适配器模式(Adapter)

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题.主要分为三类:类的适配器模式.对象的适配器模式.接口的适配器模式.首先,我们来看看类的适配器模式,先看类图: 核心思想就是:有一个Source类,拥有一个方法,待适配,目标接口时Targetable,通过Adapter类,将Source的功能扩展到Targetable里,看代码: [java] view plaincopy public class Source { public void 

Java设计模式之四 ----- 适配器模式和桥接模式

前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式.本篇则来学习下结构型模式的适配器模式和桥接模式. 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能. 简单的来说就是通过某个接口将不兼容的两个类进行兼容,俗称转换器.生活比较典型的例子是电器的电压,美国的电压是110V左右, 而中国的电压普片是220V,如果我们想用美国或日本的电器,则需要一个转换器,将110V转换成220V.还有一个很典型例子就是曾经的万能充,基

java设计模式之-适配器模式

前言 适配器模式就是当需要的功能与要提供的功能之间接口不符合时,作为两者之间的适配,从而让两者可以无缝对接.例如现实生活中的电脑充电情况一样,如果有朋友出国旅游,在国外买了一台电脑,回到国内后突然想给电脑充电,发现外国的电压不是220V的,而是110V的(这里是假设的),怎么办呢?还好外国买的电脑配有充电转换器,可以将220V的电压转换成110V电压,好吧,电脑充电问题可以解决了.这其中的充电转换器就是适配器,它可以无缝连接220V电压,并将其转换为110V的电压.这就是适配器模式. 例子 一台

java设计模式之适配器模式以及在java中作用

适配器作用就是讲一个接口适配到另一个接口,在Java 的I/O类库中有很多这样的需求,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等. 以InputStreamReader和OutputStreamWriter类为例. InputStreamReader和OutputStreamWriter类分别继承了Reader和writer接口,但是要创建他们的对象必须在构造函数中传入一个InputStream和OutputStream 的实例,InputStreamReader和Out

Java设计模式之适配器模式

1.  一个示例让你明白适配器模式 http://blog.csdn.net/zhangjg_blog/article/details/18735243