java 适配器模式_Java设计模式应用——适配器模式

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

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

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

一、 类适配器模式

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

631ce7d5d716d925d2e8af72c37b83cc.png

1、 告警导出类

packagecom.coshaho.learn.adapter;public classAlarmExporter

{public voidexportCsv()

{

System.out.println("Export csv");

}public voidexportExcel()

{

System.out.println("Export excel");

}public voidexportZip()

{

System.out.println("Export zip");

}

}

2、 导出接口

packagecom.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 interfaceIExporter

{public voidexportCsv();public voidexportExcel();public voidexportPdf();

}

3、 报表导出类

packagecom.coshaho.learn.adapter;public class ReportExporter extends AlarmExporter implementsIExporter

{public voidexportPdf()

{

System.out.println("Export pdf");

}

}

二、 对象适配器模式

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

d423efff2f475d6e2e0a4f1b12bd62c6.png

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

4、 Dashboard导出类

packagecom.coshaho.learn.adapter;public class DashboardExporter implementsIExporter

{privateAlarmExporter alarmExporter;public voidexportCsv()

{

alarmExporter.exportCsv();

}public voidexportExcel()

{

alarmExporter.exportExcel();

}public voidexportPdf()

{

System.out.println("Export pdf");

}publicDashboardExporter()

{this.alarmExporter = newAlarmExporter();

}

}

三、 接口适配器模式

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

03cdc85f64139f34386b4df8e6797876.png

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

4、 抽象导出类

packagecom.coshaho.learn.adapter;public abstract class AbstractExporter implementsIExporter

{public voidexportCsv()

{

}public voidexportExcel()

{

}public voidexportPdf()

{

}

}

5、 流程导出类

packagecom.coshaho.learn.adapter;public class ProcessExporter extendsAbstractExporter

{public voidexportPdf()

{

System.out.println("Export pdf");

}

}

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

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

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

34e1a1e7a188cbdb79f2d09d136a6aed.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值