重构 — 改善既有的类图设计
条款5:给工厂加一个代理
条款5:给工厂加一个代理
黄国强 2008/5/21

向这次大地震遇害的同胞表示哀悼。
前些天和同事聊到设计做到什么程度的话题,我特别提到经济性这个原则。在做设计的时候对于灵活性也要有个度。并不是越灵活越好。而把握这个度的原则就是经 济性。在你的项目的需求很少变化或本身很简单的情况下,做过多设计并不好。正所谓“过犹不及”。而我更是认为“欠点总比过好”。
继续我们重构的话题。
图 1
请看图1。图中由于 B 引用了 A_Factory 类,而 A_Factory 类又引用了类 AA 和 AB 。所以,类 B 依然依赖于类 AA 和 AB 。当初引入工厂 A_Factory 类的意图是将类 B 和类 AA 和 AB 不发生依赖关系。显然这个意图并没有达到。
接着看图2。这是重构后的结果。

图 2
我们引入了一个代理类 A_FactoryProxy 。这张图中,类 B 和类 AA 和 AB 完全没有依赖关系。未来类 AA 和 AB 发生任何变化都不会对类 B 造成任何影响。
从图上也可看出代理类 A_FactoryProxy 内部持有接口 IA_FACTORY 的指针,从而只和接口 IA_FACTORY 发生关系,和类 A_Factory 也不发生关系。