簡單工廠設計模式
阿新 • • 發佈:2017-09-25
factory ddc sys gif style 乘法 三種 不同的 pub
案例:計算器程序的編寫
第一種:
import java.util.Scanner; public class Operation { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("請輸入第一個數字:"); double num1 = input.nextDouble(); System.out.println("請輸入運算符號:"); String operate計算器= input.next(); System.out.println("請輸入第二個數字:"); double num2 = input.nextDouble(); double sum = 0; // 保存結果 switch (operate) { case "+": sum = num1 + num2; break; case "-": sum = num1 - num2; break; case"*": sum = num1 * num2; break; case "/": sum = num1 / num2; break; } System.out.println("結果是:" + sum); } }
第二種:
/** * 運算類 */ public class Operate { public static double getOperate(double num1, String operate, double運算類num2) { double sum = 0; // ??′??á?? switch (operate) { case "+": sum = num1 + num2; break; case "-": sum = num1 - num2; break; case "*": sum = num1 * num2; break; case "/": sum = num1 / num2; break; } return sum; } }
import java.util.Scanner; public class Operation { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("請輸入第一個數字:"); double num1 = input.nextDouble(); System.out.println("請輸入運算符號:"); String operate = input.next(); System.out.println("請輸入第二個數字:"); double num2 = input.nextDouble(); // 獲取結果 double sum = Operate.getOperate(num1, operate, num2); System.out.println("結果是:" + sum); } }測試類
第三種:
01.設置一個運算類接口
02.然後四種運算方法分別實現此接口
03.在寫出運算類和測試類
/** * 無論是加減乘除 還是平方,開根等 * 都是運算 * 接口就是規定一種行為! 不關註實現! * 就寫一個運算的方法! * */ public interface Operation { double getResult(double num1, double num2); }總接口
public class Addtion implements Operation { @Override public double getResult(double num1, double num2) { return num1 + num2; } }加法
public class Minus implements Operation { @Override public double getResult(double num1, double num2) { return num1 - num2; } }減法
public class Multiplication implements Operation { @Override public double getResult(double num1, double num2) { return num1 * num2; } }乘法
public class Division implements Operation { @Override public double getResult(double num1, double num2) { return num1 / num2; } }除法
import cn.bdqn.third.impl.Addtion; import cn.bdqn.third.impl.Division; import cn.bdqn.third.impl.Minus; import cn.bdqn.third.impl.Multiplication; import cn.bdqn.third.impl.Operation; /** * 運算類 * * * * 真正運算的是 我們的接口還是 實現類!!!! * 肯定是實現類! * 言外之意,我們需要實例化 實現類 才能實現運算的功能! * 這麽多實現類 都需要 實例化! * * 01.我們有繼承關系! * 02.有多個實現類需要實例化 * 03.首選我們的工廠設計模式 * * 雖然代碼量增加! 但是我們程序的擴展性和復用性強了!耦合度降低! * */ public class OperateFactory { /** * * @param operate 用戶傳遞過來的運算符號 * @return 根據用戶的運算符號 返回不同的算法 */ public static Operation getOperate(String operate) { // 父類引用指向子類的對象 Operation operation = null; switch (operate) { case "+": operation = new Addtion(); break; case "-": operation = new Minus(); break; case "*": operation = new Multiplication(); break; case "/": operation = new Division(); break; } return operation; } }運算類
import java.util.Scanner; import cn.bdqn.third.impl.Operation; public class OperationDemo { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("請輸入第一個數字:"); double num1 = input.nextDouble(); System.out.println("請輸入運算符號:"); String operate = input.next(); System.out.println("請輸入第二個數字:"); double num2 = input.nextDouble(); Operation operation = OperateFactory.getOperate(operate); System.out.println(operation.getResult(num1, num2)); } }測試類
簡單工廠設計模式