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 阅读(190) 评论(0)  编辑  收藏 所属分类: Java


只有注册用户登录后才能发表评论。


网站导航:
 

导航

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

常用链接

留言簿(1)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜