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

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

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

    java Source

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

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

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


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


      下面的例子說(shuō)明了如何在應(yīng)用程序中利用計(jì)數(shù)代理。

      例子:

      讓我們?cè)O(shè)計(jì)一個(gè)Order類(lèi),類(lèi)層次如圖2,OrderIF接口聲明了getAllOrders讀取數(shù)據(jù)庫(kù)中所有訂單的簡(jiǎn)單方法。


    Figure2: Order Class Hierarchy

    public interface OrderIF {
    public Vector getAllOrders();
    }

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

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

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

      這個(gè)附加的功能可以設(shè)計(jì)一個(gè)單獨(dú)的OrderProxy類(lèi)來(lái)實(shí)現(xiàn),它與真實(shí)對(duì)象Order一樣實(shí)現(xiàn)OrderIF接口。這樣保證了OrderProxy對(duì)象提供給客戶(hù)與真實(shí)對(duì)象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;
     }
    }

       客戶(hù)對(duì)象MainApp就想調(diào)用真實(shí)對(duì)象Order一樣調(diào)用OrderProxy對(duì)象上的getAllOrders()方法,OrderProxy對(duì)象 傳遞這個(gè)調(diào)用給真實(shí)對(duì)象Order,計(jì)算讀取所有訂單所花費(fèi)的時(shí)間并使用FileUtil幫助類(lèi)將其紀(jì)錄的log日志文件中。在這個(gè)過(guò)程中, OrderProxy扮演者計(jì)數(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 閱讀(372) 評(píng)論(1)  編輯  收藏 所屬分類(lèi): Java

    Feedback

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

    主站蜘蛛池模板: 亚洲国产成人久久三区| 曰皮全部过程视频免费国产30分钟| 久久久久久久尹人综合网亚洲| 十八禁无码免费网站| 狼人大香伊蕉国产WWW亚洲| 亚洲男人第一av网站| 免费a级毛片视频| 最近最好的中文字幕2019免费 | 亚洲精品无码久久不卡| 成人免费看片又大又黄| 91免费国产自产地址入| 国产好大好硬好爽免费不卡| 免费国产黄网站在线看| 亚洲jizzjizz少妇| 亚洲午夜精品久久久久久app| 久久青草亚洲AV无码麻豆| 国产成人精品久久亚洲高清不卡 | 手机在线毛片免费播放| 久久精品女人天堂AV免费观看 | 婷婷亚洲综合五月天小说 | 中文字幕无码免费久久| 亚洲欧洲免费无码| 亚洲AV无码专区国产乱码4SE| 亚洲成av人片不卡无码久久| 亚洲av高清在线观看一区二区 | 亚洲av永久无码| 亚洲精华国产精华精华液好用| 亚洲ts人妖网站| 色综合久久精品亚洲国产| 无码免费又爽又高潮喷水的视频 | 免费在线视频一区| 亚洲Av无码精品色午夜| 亚洲成人网在线观看| 亚洲精品人成网线在线播放va| 美女视频黄频a免费大全视频| 一区二区三区在线免费| 国产一卡二卡四卡免费| 国产三级免费电影| 亚洲视频在线免费播放| 边摸边吃奶边做爽免费视频网站| a级在线免费观看|