简单工厂模式--计算器代码及UML图
生活随笔
收集整理的這篇文章主要介紹了
简单工厂模式--计算器代码及UML图
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡單工廠模式
- Simple Factory模式根據提供給它的數據,返回幾個可能類中的一個類的實例。通常它返回的類都有一個公共的父類和公共的方法。
- 簡單工廠模式也被稱為靜態工廠模式;使用簡單工廠模式可以將產品的“消費”和生產完全分開,客戶端只需要知道自己需要什么產品,如何來使用產品就可以了,具體的產品生產任務由具體的工廠類來實現。工廠類根據傳進來的參數生產具體的產品供消費者使用。這種模式使得更加利于擴展,當有新的產品加入時僅僅需要在工廠中加入新產品的構造就可以了。
優點
- 工廠類含有必要的判斷邏輯,可以決定在什么時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的責任,而僅僅"消費"產品。簡單工廠模式通過這種做法實現了對責任的分割。
缺點
-
當產品有復雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。
-
因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。
-
當產品有復雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。
-
同時,系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過于復雜。
-
另外,簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基于繼承的等級結構。
-
工廠類集成了所有產品的創建邏輯,當工廠類出現問題,所有產品都會出現問題;還有當新增加產品都會修改工廠類,違背開閉原則
本質
選擇實現
使用場景
-如果想要完全封裝隔離具體實現,讓外部只能通過接口來操作封裝體,則可以選用簡單工廠。讓客戶端通過工廠來獲取相應的接口,而無需關心具體的實現。
- 如果想要把對外創建對象的職責集中管理和控制,可以選用簡單工廠。
簡單工廠模式的構成
- 工廠類角色Creator (LightSimpleFactory):工廠類在客戶端的直接控制下(Create方法)創建產品對象。
- 抽象產品角色Product (Light):定義簡單工廠創建的對象的父類或它們共同擁有的接口??梢允且粋€類、抽象類或接口。
- 具體產品角色ConcreteProduct (BulbLight, TubeLight):定義工廠具體加工出的對象。
簡單工廠模式的UML
問題:
請用C++、Java、C#或VB.NET任意一種面向對象語言實現一個計算器控制臺程序,要求輸入兩個數和運算符號,得到結果。
計算器的簡單工廠模式實現代碼及UML圖
//java語言實現 package Calculator;public abstract class Operation {public double numberA=0;public double numberB=0;public double getNumberA() {return numberA; } public void setNumberA(double numberA) {this.numberA = numberA; } public double getNumberB() {return numberB; } public void setNumberB(double numberB) {this.numberB = numberB; }public abstract double GetReault();} =========================================== package Calculator;public class OperationAdd extends Operation {@Overridepublic double GetReault() {double result=0;result=numberA+numberB;return result;} } =================================================== package Calculator;public class OperationSub extends Operation {@Overridepublic double GetReault() {double result=0;result=numberA-numberB;return result;} } ================================================ package Calculator;public class OperationMul extends Operation {@Overridepublic double GetReault() {double result=0;result=numberA*numberB;return result;}} =================================================== package Calculator;import java.io.IOError;public class OperationDiv extends Operation {@Overridepublic double GetReault() {try{return numberA/numberB;} catch(IOError e){System.out.println("除數不能為0!!!");return 0;}} } ============================================================== package Calculator;public class OperationFactory {public static Operation createOperation(char operate){Operation oper=null;switch(operate){case '+':oper=new OperationAdd();break;case '-':oper=new OperationSub();break;case '*':oper=new OperationMul();break;case '/':oper=new OperationDiv();break;}return oper;} } ========================================================= package Calculator; public class Client {public static void main(String[] args) {Operation oper;oper=OperationFactory.createOperation('+');oper.numberA=100;oper.numberB=20;double result=oper.GetReault();System.out.println(result);}}總結
以上是生活随笔為你收集整理的简单工厂模式--计算器代码及UML图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SOC、SOPC、MPSOC、RFSOC
- 下一篇: FF14 CMTool 使用教程