設計模式—簡單原廠模式+執行個體

來源:互聯網
上載者:User

簡單原廠模式:實質是一個工廠類根據傳入的參數,動態決定建立哪個產品類的執行個體,這些產品類繼承自一個類或介面;

解決問題:到底執行個體化誰,將來會不會增加執行個體化的對象;對於很容易變化的地方,應該考慮用一個單獨的類來做這個創造執行個體的過程。

執行個體:輸入兩個數和運算子,得到運算結果

1、建立抽象對象類Operation.java,具體對象類OperateAdd,java,OperateDivide.java,OperateMultiply.java,OperateSubtrct.java,工廠類OperateFactory.java,視圖類OperateMain.java

2、具體實現

OperateMain.java:

package com.test.factory;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Scanner;import com.sun.corba.se.spi.orb.OperationFactory;public class OperateMain {private static int numberA;private static int numberB;private static InputStreamReader inputStreamReader;private static BufferedReader bufferReader;public static void main(String[] args){try {System.out.println("please input a number:");inputStreamReader = new InputStreamReader(System.in);bufferReader = new BufferedReader(inputStreamReader);numberA = Integer.parseInt(bufferReader.readLine());System.out.println("please input a operate:");Scanner input = new Scanner(System.in);String operate = input.next();System.out.println("please input a number again:");inputStreamReader = new InputStreamReader(System.in);bufferReader = new BufferedReader(inputStreamReader);numberB = Integer.parseInt(bufferReader.readLine());Operation oper = OperateFactory.createOperation(operate);oper.numberA = numberA;oper.numberB = numberB;System.out.println(numberA + operate + numberB + " = "+oper.getResult());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

Operation.java:

package com.test.factory;public class Operation {public int numberA,numberB;public float result;public float getResult(){return result;}}

OperateAdd.java:

package com.test.factory;public class OperateAdd extends Operation{@Overridepublic float getResult() {// TODO Auto-generated method stubreturn numberA + numberB;}}

OperateFactory.java:

package com.test.factory;public class OperateFactory {public static Operation createOperation(String operate){if (operate.equals("+")){return new OperateAdd();} else if(operate.equals("-")) {return new OperateSubtract();} else if (operate.equals("*")){return new Operatemultiply();} else if (operate.equals("/")){return new OperateDivide();}return null;}}

3、Operation類中兩個int屬性,一個getResult方法行為;

加減乘除類都繼承Operation類,重寫getResult方法;

OperationFactory為工廠類,根據傳入的String參數,動態建立具體運算類,建立何種運算類,怎麼建立,都在這個類中實現;

4、運行如下:

優點
工廠類是整個模式的關鍵.包含了必要的邏輯判斷,根據外界給定的資訊,決定究竟應該建立哪個具體類的對象.通過使用工廠類,外界可以從直接建立具體產品對象的尷尬局面擺脫出來,僅僅需要負責“消費”對象就可以了。而不必管這些對象究竟如何建立及如何組織的.明確了各自的職責和權利,有利於整個軟體體繫結構的最佳化。
缺點
由於工廠類集中了所有執行個體的建立邏輯,違反了高內聚責任分配原則,將全部建立邏輯集中到了一個工廠類中;它所能建立的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。
當系統中的具體產品類不斷增多時候,可能會出現要求工廠類根據不同條件建立不同執行個體的需求.這種對條件的判斷和對具體產品類型的判斷交錯在一起,很難避免模組功能的蔓延,對系統的維護和擴充非常不利;
這些缺點在Factory 方法模式中得到了一定的克服。
使用情境
工廠類負責建立的對象比較少;
客戶只知道傳入工廠類的參數,對於如何建立對象(邏輯)不關心;
由於簡單工廠很容易違反高內聚責任分配原則,因此一般只在很簡單的情況下應用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.