本隨筆接上一篇: "工廠方法模式的一些思考(java語法表示)" 那就給factory進行"依賴註入"吧 業務邏輯應該跟非業務邏輯分開,對上面的代碼進行提煉函數重構 可以看到代碼清晰了很多,而且我們獲得了一個特性,那就是業務邏輯對類型不在乎。等等,如果去掉工廠方法模式又怎樣?似乎我們也能得到這個特性 ...
本隨筆接上一篇: 工廠方法模式的一些思考(java語法表示)
那就給factory進行"依賴註入"吧
Factory factory;
factory = new FactoryImplA();//先從引用精準類型開始吧,至少下麵的業務邏輯不用考慮精準類型的問題
//業務邏輯1
AInterface a;
a = factory.getIt();
a.work();
factory = new FactoryImplB();
//業務邏輯2
AInterface b;
b = factory.getIt();
b.work();
業務邏輯應該跟非業務邏輯分開,對上面的代碼進行提煉函數重構
//業務邏輯
void doWork(Factory f){
f.getIt().work()
}
public static void main(String[] args){
Factory factory;
factory = new FactoryImplA();
doWork(factory);
factory = new FactoryImplB();
doWork(factory);
}
可以看到代碼清晰了很多,而且我們獲得了一個特性,那就是業務邏輯對類型不在乎。等等,如果去掉工廠方法模式又怎樣?似乎我們也能得到這個特性…
void doWork(AInterface a){
a.work()
}
public static void main(String[] args){
AInterface a;
a = new AInterfaceImpl();
doWork(a);
a = new BInterfaceImpl();
doWork(a);
}
是的,你當然可以這樣做。但兩段代碼最主要的區別就是,前者依賴的是工廠,後者依賴的是業務對象。
維基百科對工廠方法模式實現的描述,最後一句話是這樣的:
……—rather than by calling a constructor
—而不是調用構造方法
。哇,我們通過引入工廠方法模式完美實踐了維基百科的描述。
工廠在這裡充當的角色就是一個中間層,再次驗證了一句話,所有軟體工程問題都可以通過引用一個中間層來解決。
出問題->引入中間層->出問題->引入中間層->出問題->...,看,我們最喜歡的遞歸。