1. 程式人生 > >Java設計模式應用——適配器模式

Java設計模式應用——適配器模式

ima sse 適合 開發者 http pan das report 使用

性能監控系統中,存在告警模塊和報表模塊,告警結果和報表結果都需要導出。

由於告警開發進度較快,已經實現了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包的開發。

技術分享

Java設計模式應用——適配器模式