Java設計模式應用——適配器模式
阿新 • • 發佈:2017-06-08
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 { publicvoid 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設計模式應用——適配器模式