zoukankan      html  css  js  c++  java
  • 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包的开发。

  • 相关阅读:
    索引聚焦如何使 SQL Server高效 设计(ITPUT 讨论汇总)
    android包Android "java.lang.NoClassDefFoundError:*"报错的处理方法
    删除实现图的构造、DFS、BFS 以及图的删除实现
    RTL8019以太网控制器
    JavaScript正则表达式
    sql语句
    无线模块电阻表
    FindWindow(api)确认程序是否在运行
    正则表达式语法
    msi安装程序安装参数
  • 原文地址:https://www.cnblogs.com/coshaho/p/6959746.html
Copyright © 2011-2022 走看看