<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    afunms

    My Software,My Dream—Forge a more perfect NMS product.

    bridge pattern重構report

    我們要實現三個功能:在 jsp 頁面上生成報表(包括一個表和一個圖)、生成 pdf 報表和 excel 報表。

    原來的代碼雖然已經實現了這些功能,但每個類的功能不明確,而且存在大量重復代碼。于是想到用設計模式來解決這個問題。起初想用裝飾模式( Decorator Pattern ),但經過分析,發現裝飾模式適合于那種需要把多個功能動態組合在一起的情況。但對于一個 report ,我們并不需要它同時能生成 pdf excel (即不是多個功能的組合)。

    橋梁模式( Bridge Pattern )才是最適合的。橋梁模式的用意是 " 將抽象化( Abstraction )與實現化( Implementation )脫耦,使得二者可以獨立地變化 " 。( According to GoF, the Bridge Pattern is intended to "Decouple an abstraction from its implementation so that the two can vary independently"

    類圖如下:
    Snap1.jpg

    ?

    類名

    功能

    角色

    AbstractionReport

    所有功能報表的父類

    抽象化(Abstraction)

    PdfReport

    生成pdf報表文件

    修正抽象化

    (Refined Abstraction)

    ExcelReport

    生成excel報表文件

    修正抽象化

    JspReport

    jsp中調用,生成報表

    修正抽象化

    ?

    ?

    ?

    ImplementorReport

    所有數據報表的父類

    實現化(Implementor)

    NetworkPerformanceReport

    網絡設備性能報表

    具體實現化

    (Concrete Implementor)

    ServerPerformanceReport

    服務器性能報表

    具體實現化

    PortTrafficReport

    接口流量報表

    具體實現化

    AbstractionReport的功能是生成pdfexcel文件,而ImplementorReport的功能是收集數據,為生成報表作準備。

    AbstractionReport的子類相對固定,因為我們現在只要實現三個功能,當然,如果以后還想再實現其他功能,比如生成txt報表或html報表,我們還能再擴展,增加兩個類TxtReportHtmlReport即可實現。

    ImplementorReport的子類就比較多了,列出的只是其中三個。

    任意一個AbstractionReportImplementorReport的組合都能有不同的功能。有了以上的各個類,我們就能生成各種各樣的報表,比如我們要生成一個“網絡設備性能”的pdf報表文件,就這么寫:

    ?????? AbstractionReport report = new PdfReport(new NetworkPerformanceReport());???????

    ?????? report.createReport();

    生成excel報表文件:

    ?????? AbstractionReport report = new ExcelReport(new NetworkPerformanceReport());???????

    ?????? report.createReport();

    ?

    生成“服務器性能報表pdf報表文件:

    ?????? AbstractionReport report = new PdfReport(new ServerPerformanceReport());???????

    ?????? report.createReport();

    ?

    生成“服務器性能報表excel報表文件:

    ??? ??? AbstractionReport report = new ExcelReport(new ServerPerformanceReport());???????

    ?????? report.createReport();




    posted on 2006-11-22 10:09 afunms 閱讀(204) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    My Links

    News

    留言簿(18)

    隨筆檔案

    相冊

    搜索

    最新評論

    閱讀排行榜

    主站蜘蛛池模板: 人人玩人人添人人澡免费| 亚洲国产韩国一区二区| 亚洲国产成人久久精品大牛影视 | 日韩a毛片免费观看| 免费无码又黄又爽又刺激| 亚洲精品456在线播放| 99re6热视频精品免费观看| 久久精品国产精品亚洲艾草网| a级毛片视频免费观看| 亚洲国产综合无码一区| 国产白丝无码免费视频| 亚洲蜜芽在线精品一区| 亚洲免费观看在线视频| 中中文字幕亚洲无线码| 日韩激情无码免费毛片| 免费无码国产在线观国内自拍中文字幕 | 亚洲精品无码不卡在线播HE | 国产精品免费看久久久香蕉| 国产精品亚洲高清一区二区 | 免费观看激色视频网站bd| 亚洲码一区二区三区| 最新仑乱免费视频| 国产亚洲男人的天堂在线观看| 亚洲片国产一区一级在线观看| 在线观看免费播放av片| 亚洲精品成人图区| 免费高清小黄站在线观看| 无套内射无矿码免费看黄| 亚洲热妇无码AV在线播放| 6080午夜一级毛片免费看 | 美女视频黄的全免费视频| 久久久久亚洲国产AV麻豆 | 啦啦啦高清视频在线观看免费 | 国产裸模视频免费区无码| 国产无限免费观看黄网站| 在线观看亚洲一区二区| 免费无码又爽又刺激毛片| 老司机精品免费视频| youjizz亚洲| 亚洲性日韩精品国产一区二区| 久久99国产乱子伦精品免费|