vinny

          用于管理活動資源的通用模式

          1.不用管理模式

           1 public class BalanceChecker {
           2     private BankAccountManager mgr;
           3 
           4     public BalanceChecker() {
           5         mgr = new BankAccountManager();
           6     }
           7 
           8     public boolean hasEnoughMoney(int bankAccountId, double money) {
           9         BankAccount account = mgr.getBankAccount(bankAccountId);
          10         return account.getBalance() >= money);
          11     }
          12 }

          實際上只需要一個BankAccountManager,它可以被多個對象和線程重用。可以用靜態方法代替:

          1 public boolean hasEnoughMoney(int bankAccountId, double money) {
          2         BankAccount account = BankAccountManager.getBankAccount(bankAccountId);
          3         return account.getBalance() >= money;
          4     }

          但是這樣與BankAccountManager緊密耦合在一起。

          2.單例模式(Singleton pattern)

          簡單例子:

           1 public class Widget {
           2     private static Widget instance = new Widget();
           3     
           4     public static Widget getInstance() {
           5         return instance;
           6     }
           7     private Widget() {
           8     }
           9     public int doSomething(int x, int y) {
          10         return x + y;
          11     }
          12 }

          重構后的:

           1 public class BalanceChecker {
           2     private BankAccountManager mgr;
           3     public BalanceChecker() {
           4         mgr = BankAccountManager.getInstance();
           5     }
           6     public boolean hasEnoughMoney(int bankAccountId, double money) {
           7         BankAccount account = mgr.getBankAccount(bankAccountId);
           8         return account.getBalance() >= money);
           9     }
          10 }

          如果需要不同類型的BankAccountManager呢?則不行。仍是緊耦合。

          3.工廠模式(Factory pattern)

           1 public class BalanceChecker {
           2     private BankAccountManager mgr;
           3     public BalanceChecker() {
           4         mgr = BankAccountManagerFactory.getManager();
           5     }
           6     public boolean hasEnoughMoney(int bankAccountId, double money) {
           7         BankAccount account = mgr.getBankAccount(bankAccountId);
           8         return account.getBalance() >= money);
           9     }
          10 }
          getManager()返回BankAccountManager接口的一個實現。

          3.注冊類模式(Registry pattern)

          工廠類對解耦代碼非常有效,當是當有許多工廠類,處理所有不同的工廠類將難以控制。
          此時,可以創建一個稱為registry的類,把它作為組件倉庫,用來存放所有將要選用的組件。
          一個注冊類最簡單的形式僅僅是鍵到對象的映射。WebWork的ActionContext就是一個注冊類的例子

          posted on 2007-11-05 13:39 vinny 閱讀(198) 評論(0)  編輯  收藏 所屬分類: Java


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


          網站導航:
           

          導航

          <2007年11月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 洞头县| 江城| 洛阳市| 和政县| 昌都县| 温宿县| 正阳县| 白河县| 滦南县| 彩票| 霍邱县| 芜湖县| 庐江县| 九江市| 全椒县| 揭阳市| 遂川县| 宿迁市| 屏边| 江城| 尉犁县| 泸溪县| 长子县| 甘德县| 扶绥县| 松原市| 花莲县| 万安县| 泽库县| 宁武县| 商城县| 南木林县| 呼和浩特市| 莒南县| 泸定县| 大同市| 汾西县| 福清市| 绥棱县| 西乌珠穆沁旗| 金堂县|