《大話設計模式》——讀後感 (5)雷鋒依然在人間?——工廠方法模式
阿新 • • 發佈:2017-06-21
pri sys rod 加法 完全 .cn 依賴關系 style 優點
什麽是工廠方法模式:
工廠方法UML結構圖:
從圖中我獲取以下信息:
1、 Product是個接口,而Creator是個抽象類(我還是試試接口)
2、ConcreateProduct和ConcreteCreator是有依賴關系的,後者依賴前者
接下來看看簡單工廠模式中例子用工廠模式實現的設計圖:
根據設計圖。直接上代碼:
運算接口:
package com.sjmx.slpFactory; public interface Operation { public double getResult(double a,double b); }
運算加法實現類:
packagecom.sjmx.slpFactory; public class OperationAdd implements Operation { @Override public double getResult(double a, double b) { return a+b; } }
運算減法實現類:
package com.sjmx.slpFactory; public class OperationDelete implements Operation { @Override public double getResult(doublea, double b) { return a-b; } }
其他的實現類省略.............................
工廠接口:
package com.sjmx.factory; import com.sjmx.slpFactory.Operation; public interface Factory { Operation getOperation(); }
工廠加法實現類:
package com.sjmx.factory; import com.sjmx.slpFactory.Operation;import com.sjmx.slpFactory.OperationAdd; public class AddFactory implements Factory { @Override public Operation getOperation() { return new OperationAdd(); } }
工廠減法實現類:
package com.sjmx.factory; import com.sjmx.slpFactory.Operation; import com.sjmx.slpFactory.OperationDelete; public class DeleteFactory implements Factory { @Override public Operation getOperation() { return new OperationDelete(); } }
其他實現類省略不寫了。。。
客戶端代碼:
package com.sjmx.factory; import com.sjmx.slpFactory.Operation; public class Client { public static void main(String[] args) { Factory f = new AddFactory(); Operation oper = f.getOperation(); System.out.println(oper.getResult(8, 9)); System.out.println(oper.getResult(4, 6)); System.out.println(oper.getResult(84, 3)); } }
我不知道你看明白沒有,我通過簡單工廠VS工廠模型有以下感悟:
1、簡單工廠的工廠類中包含了具體算法的邏輯判斷,客戶端只需要知道加、減、乘等就可以得到想要的運算結果,解決了具體算法的創建問題;而且客戶端和算法沒有什麽耦合的地方
2、工廠模式把原本簡單工廠的邏輯判斷放到了客戶端去執行,增加了耦合度;但是工廠模式更好的體現了開放-閉合原則,更加的易於拓展和維護,比如,我現在需要加開根運算,平方運算等等,只需要拓展具體算法和增加算法生成工廠類就可以,完全不會去修改之前的邏輯;而簡單工廠則不需要去修改工廠類裏面的邏輯判斷。如果從這個角度去理解,其實工廠模式也還是降低了客戶端與業務的耦合度,只不過要在一定量的前提下才能體現出來。
3、兩種模式都有優點和缺點,具體應用要看實際情況而定
《大話設計模式》——讀後感 (5)雷鋒依然在人間?——工廠方法模式