软件设计中的权衡与多态性应用
1. 中介模式的优势与权衡
中介模式具有诸多优势,其中之一是中介者能够跟踪被中介对象的活动。以银行系统为例,银行(Bank)必须对银行账户(BankAccount)对象的创建进行中介,否则其账户映射可能会不准确。银行类还可以利用中介来跟踪特定账户的活动,例如通过修改存款方法来跟踪外国账户的存款情况:
public void deposit(int acctnum, int amt) {
BankAccount ba = accounts.get(acctnum);
if (ba.isForeign())
writeToLog(acctnum, amt, new Date());
ba.deposit(amt);
}
然而,低耦合和单一职责原则常常相互冲突。中介模式是实现低耦合的常见方式,但中介类往往会积累一些并非其核心目的的方法,这可能违反单一职责原则。在银行示例中,银行类拥有获取余额、存款和设置账户类型等方法,而这些方法本应是银行账户类的职责。但银行需要这些方法,因为它在银行客户(BankClient)和银行账户之间进行中介。
另一种设计方案是放弃中介模式,让银行客户直接访问银行账户对象。这种设计下,银行类的 API 更简单,客户可以直接传递所需银行账户的引用给银行的授权贷款方法,从而提高效率。但两种设计各有优劣,低耦合设计版本 4 耦合度更低,而新设计的 API 更简单,更符合单一职责原则。
2. Java 映射的设计权衡
Java 库中的 Map 类是设计权衡的一个实
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



