java設計模式之簡單工廠
阿新 • • 發佈:2018-12-09
package com.jiangwg.psj.design; import java.util.Scanner; /** * @Auther: Peng Senjie * @Date: 2018-09-14 * @Description: 簡單工廠模式 */ public class Jiandangongchang { public static void main(String[] args) { //one();//一般 //two();//進階:封裝。業務介面分開,複用性, //three();//繼承多型,鬆耦合,增加一個分支,如開根號演算法,為了不影響原來方法, four();//簡單工廠模式,加減演算法用一個類去代理 } private static void one(){ Scanner sc = new Scanner(System.in); System.out.println("請輸入數字A:"); String numberA = sc.nextLine(); //讀取字串型輸入 System.out.println("請輸入運算子:"); String strOperate = sc.nextLine(); //讀取字串型輸入 System.out.println("請輸入數字B:"); String numberB = sc.nextLine(); //讀取字串型輸入 double result=0.0; double v = Double.parseDouble(numberA); double v1 = Double.parseDouble(numberB); switch (strOperate){ case "+": result=v+v1; break; case "-": result=v+v1; break; case "*": result=v+v1; break; case "/": if(numberB.equals("0")){ System.out.println("被除數不能為0"); }else { result=v+v1; } break; } System.out.println("結果是:" + result); } private static void two(){ Scanner sc = new Scanner(System.in); System.out.println("請輸入數字A:"); String numberA = sc.nextLine(); //讀取字串型輸入 System.out.println("請輸入運算子:"); String strOperate = sc.nextLine(); //讀取字串型輸入 System.out.println("請輸入數字B:"); String numberB = sc.nextLine(); //讀取字串型輸入 double result = Operation.getResult(numberA,numberB,strOperate); System.out.println("結果是:" + result); } private static void three(){ Scanner sc = new Scanner(System.in); System.out.println("請輸入數字A:"); String numberA = sc.nextLine(); //讀取字串型輸入 //System.out.println("請輸入運算子:"); //String strOperate = sc.nextLine(); //讀取字串型輸入 System.out.println("請輸入數字B:"); String numberB = sc.nextLine(); //讀取字串型輸入 OperationDiv operationMul = new OperationDiv(); //todo:每次都要實列化物件(符號也沒了。),能不能根據符號自動實列話出相應的物件呢(用單獨類去代理例項化的過程)---》簡單工廠 operationMul.setNewA(Double.parseDouble(numberA)); operationMul.setNewB(Double.parseDouble(numberB)); double result = operationMul.getResult(); System.out.println("結果是:" + result); } private static void four(){ Scanner sc = new Scanner(System.in); System.out.println("請輸入數字A:"); String numberA = sc.nextLine(); //讀取字串型輸入 System.out.println("請輸入運算子:"); String strOperate = sc.nextLine(); //讀取字串型輸入 System.out.println("請輸入數字B:"); String numberB = sc.nextLine(); //讀取字串型輸入 OperationTwo op = OperationFactory.createOp(strOperate); op.setNewA(Double.parseDouble(numberA)); op.setNewB(Double.parseDouble(numberB)); double result = op.getResult(); System.out.println("結果是:" + result); } } class Operation { static double getResult(String numberA,String numberB,String strOperate){ double result=0.0; double v = Double.parseDouble(numberA); double v1 = Double.parseDouble(numberB); switch (strOperate){ case "+": result=v+v1; break; case "-": result=v+v1; break; case "*": result=v+v1; break; case "/": if(numberB.equals("0")){ System.out.println("被除數不能為0"); }else { result=v+v1; } break; } return result; } } class OperationTwo{ private double newA=0.0; private double newB=0.0; public double getNewA() { return newA; } public void setNewA(double newA) { this.newA = newA; } public double getNewB() { return newB; } public void setNewB(double newB) { this.newB = newB; } public double getResult(){ double result=0.0; return result; } } class OperationAdd extends OperationTwo{ @Override public double getResult() { double result=0.0; result=getNewA()+getNewB(); return result; } } class OperationSub extends OperationTwo{ @Override public double getResult() { double result=0.0; result=getNewA()-getNewB(); return result; } } class OperationMul extends OperationTwo{ @Override public double getResult() { double result=0.0; result=getNewA()*getNewB(); return result; } } class OperationDiv extends OperationTwo{ @Override public double getResult() { double result=0.0; System.out.println("getnewb:"+getNewB()); if(Double.doubleToLongBits(getNewB())==0){ System.out.println("被除數不能為0"); }else{ result=getNewA()/getNewB(); } return result; } } class OperationFactory{ public static OperationTwo createOp(String strOperate){ double result=0.0; OperationTwo otwo=null; switch (strOperate){ case "+": otwo=new OperationAdd(); break; case "-": otwo=new OperationSub(); break; case "*": otwo=new OperationMul(); break; case "/": otwo=new OperationDiv(); break; } return otwo; } }