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

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

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

    java Source

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      14 Posts :: 24 Stories :: 8 Comments :: 0 Trackbacks
    描述:

      計數(shù)代理模式在客戶對象調(diào)用服務(wù)提供者對象上方法的前后執(zhí)行諸如日志(logging)和計數(shù)(counting)一系列附加 功能時很有用。計數(shù)代理模式建議把這些附加功能封裝在一個單獨的對象,這個對象就是指計數(shù)代理對象,而不是把這些附加的功能實現(xiàn)放到服務(wù)提供者的內(nèi)部。良 好的對象設(shè)計的一個特征就是對象要專注于提供特定的功能。換句話說,理想的對象不應該做各種不相干的事情。把諸如日志(logging)和計數(shù) (counting)等類似的功能封裝為一個單獨的對象,而讓服務(wù)提供者對象僅提供它自己的特定功能。也就是說,只允許服務(wù)提供者對象執(zhí)行定義良好、特定 的任務(wù)。

      計數(shù)代理被設(shè)計成可以被客戶訪問的與服務(wù)提供者具有相同接口的對象。客戶對象不是直接訪問服務(wù)提供者,而是調(diào)用計數(shù)代理對象上的方法,計數(shù)代理執(zhí)行必要的紀錄日志(logging)和計數(shù)(counting)功能后,再把方法調(diào)用傳遞給服務(wù)提供著對象。如圖1


    Figure1: Generic Class Association When the Counting Proxy Pattern Is Applied


      下面的例子說明了如何在應用程序中利用計數(shù)代理。

      例子:

      讓我們設(shè)計一個Order類,類層次如圖2,OrderIF接口聲明了getAllOrders讀取數(shù)據(jù)庫中所有訂單的簡單方法。


    Figure2: Order Class Hierarchy

    public interface OrderIF {
    public Vector getAllOrders();
    }

      作為getAllOrders方法實現(xiàn)的一部分,Order類實用了FileUtil工具類從order.txt文件中讀取訂單項。

    public class Order implements OrderIF {
     public Vector getAllOrders() {
      FileUtil fileUtil = new FileUtil();
      Vector v = fileUtil.fileToVector("orders.txt");
      return v;
     }
    }

      讓我們假定在調(diào)用getAllOrders()時,需要把取數(shù)據(jù)文件所花費的時間和記錄條數(shù)要記錄的log日志文件中。

      這個附加的功能可以設(shè)計一個單獨的OrderProxy類來實現(xiàn),它與真實對象Order一樣實現(xiàn)OrderIF接口。這樣保證了OrderProxy對象提供給客戶與真實對象Order一樣的接口。如圖3


    Figure3: Order Class Hierarchy with the Counting Proxy

    public class OrderProxy implements OrderIF {
     private int counter = 0;
     public Vector getAllOrders() {
      Order order = new Order();
      counter++;
      long t1 = System.currentTimeMillis ();
      Vector v = order.getAllOrders();
      long t2 = System.currentTimeMillis();
      long timeDiff = t2 ? t1;
      String msg = "Iteration=" + counter + "::Time=" + timeDiff + "ms";
      //log the message
      FileUtil fileUtil = new FileUtil();
      fileUtil.writeToFile("log.txt”,msg, true, true);
      return v;
     }
    }

       客戶對象MainApp就想調(diào)用真實對象Order一樣調(diào)用OrderProxy對象上的getAllOrders()方法,OrderProxy對象 傳遞這個調(diào)用給真實對象Order,計算讀取所有訂單所花費的時間并使用FileUtil幫助類將其紀錄的log日志文件中。在這個過程中, OrderProxy扮演者計數(shù)代理的角色。

    public class MainApp {
     public static void main(String[] args) {
      OrderIF order = new OrderProxy();
      Vector v = order.getAllOrders();
      v = order.getAllOrders();
      v = order.getAllOrders();
      v = order.getAllOrders();
     }
    }
    posted on 2005-11-15 14:25 JustinLei 閱讀(364) 評論(1)  編輯  收藏 所屬分類: Java

    Feedback

    # re: Java設(shè)計模式之計數(shù)代理模式 2014-06-15 00:06 LeoCook
    什么時候更新點新的呀  回復  更多評論
      

    主站蜘蛛池模板: 亚洲毛片在线免费观看| 一区二区三区在线观看免费| 久久永久免费人妻精品| 久久精品国产亚洲7777| 一区二区在线视频免费观看| 亚洲精品无码久久毛片| 国产黄在线播放免费观看| 综合亚洲伊人午夜网| 国产V片在线播放免费无码| AV在线播放日韩亚洲欧| 一级毛片**免费看试看20分钟 | 亚洲乱码中文字幕久久孕妇黑人| 一级日本高清视频免费观看| 在线亚洲午夜理论AV大片| 中文字幕在线免费看线人| 亚洲综合在线观看视频| 久久国产免费福利永久| 亚洲宅男精品一区在线观看| 巨胸喷奶水视频www网免费| 最新亚洲人成网站在线观看| 亚洲精品第一国产综合境外资源 | 黄色网页免费观看| 怡红院亚洲怡红院首页| 午夜无码A级毛片免费视频| 亚洲噜噜噜噜噜影院在线播放 | 色窝窝免费一区二区三区| 噜噜综合亚洲AV中文无码| JLZZJLZZ亚洲乱熟无码| 在线免费观看亚洲| 亚洲男人的天堂网站| 亚洲综合色视频在线观看| 91制片厂制作传媒免费版樱花| 午夜在线a亚洲v天堂网2019| 亚洲欧洲日产国码一级毛片| 久久综合给合久久国产免费| 亚洲国产成人久久精品软件| 中文亚洲成a人片在线观看| 免费能直接在线观看黄的视频| 国产精品亚洲精品久久精品| 亚洲av日韩av无码黑人| 免费无码黄十八禁网站在线观看|