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

性能监控系统中,存在告警模块和报表模块,告警结果和报表结果都需要导出。

由于告警开发进度较快,已经实现了excel导出、csv导出、zip导出功能,现在报表需要excel导出、csv导出、pdf导出功能,该如何做呢?

显然,报表不会重复开发excel导出,csv导出代码,只需要增加pdf导出代码即可,这种情况下使用适配器模式再好不过。

一、 类适配器模式

直接的想法,继承告警导出类,增加pdf导出代码,这也就是类适配器模式。

1、 告警导出类

package com.coshaho.learn.adapter;

public class AlarmExporter
{
    public void exportCsv()
    {
        System.out.println("Export csv");
    }

    public void exportExcel()
    {
        System.out.println("Export excel");
    }

    public void exportZip()
    {
        System.out.println("Export zip");
    }
}

2、 导出接口

package com.coshaho.learn.adapter;

/**
 *
 * IExporter.java Create on 2017年6月7日 下午11:25:44
 *
 * 类功能说明:  导出接口
 *
 * Copyright: Copyright(c) 2013
 * Company: COSHAHO
 * @Version 1.0
 * @Author coshaho
 */
public interface IExporter
{
    public void exportCsv();

    public void exportExcel();

    public void exportPdf();

}

3、 报表导出类

package com.coshaho.learn.adapter;

public class ReportExporter extends AlarmExporter implements IExporter
{
    public void exportPdf()
    {
        System.out.println("Export pdf");
    }
}

二、 对象适配器模式

类适配器模式可以支持报表导出功能的实现,但明眼的读者可以看出来,报表根本不需要zip导出功能,但它却有ziip导出方法,如果后面有新的开发者使用报表zip导出方法,可能会直接报错。针对这种情况,使用对象适配器模式就更胜一筹了。

我们的性能管理系统中,Dashboard也需要支持excel、csv、pdf导出,我们采用对象适配器模式实现。

4、 Dashboard导出类

package com.coshaho.learn.adapter;

public class  DashboardExporter implements IExporter
{
    private AlarmExporter alarmExporter;
    public void exportCsv()
    {
        alarmExporter.exportCsv();
    }

    public void exportExcel()
    {
        alarmExporter.exportExcel();
    }

    public void exportPdf()
    {
        System.out.println("Export pdf");
    }

    public DashboardExporter()
    {
        this.alarmExporter = new AlarmExporter();
    }

}

三、 接口适配器模式

性能系统中,流程管理模块只需要支持pdf导出(流程图导出),但是又想使用系统统一的导出接口,此时应该使用接口适配器模式。

我们可以写一个抽象导出类继承导出接口,导出方法实现都为空,各模块继承抽象导出类,只实现自己想要的导出方法即可。

4、 抽象导出类

package com.coshaho.learn.adapter;

public abstract class AbstractExporter implements IExporter
{
    public void exportCsv()
    {
    }

    public void exportExcel()
    {
    }

    public void exportPdf()
    {
    }
}

5、 流程导出类

package com.coshaho.learn.adapter;

public class ProcessExporter extends AbstractExporter
{
    public void exportPdf()
    {
        System.out.println("Export pdf");
    }
}

实际应用中,不要过多使用适配器模式,这样可能造成代码结构混乱,必要的时候可以重构代码使其更加通用。

总体来说,对象适配器模式优于类适配器模式,对象适配器模式也是多个其他设计模式的基础。

接口适配器模式更加适合于工具类或者开源底层jar包的开发。

时间: 2024-08-06 20:04:45

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设计模式-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