簡單工廠模式(靜態工廠模式)html
簡單設計模式不符合開放-封閉原則,若是新增一種運算須要涉及改動的類過多。java
場景:採用簡單工廠模式設計一款運算器能夠自由添加運算規則設計模式
計算器運算抽象類
1 /** 2 * 計算器運算抽象類 3 */ 4 public abstract class Operation { 5 /** 6 * 操做數A 7 */ 8 private double numberA; 9 /** 10 * 操做數B 11 */ 12 private double numberB; 13 14 /** 15 * 抽象方法 16 * 得到操做結果 17 * 18 * @return 19 */ 20 public abstract double getResult(); 21 22 /** 23 * 獲取 操做數A 24 * 25 * @return numberA 操做數A 26 */ 27 public double getNumberA() { 28 return this.numberA; 29 } 30 31 /** 32 * 設置 操做數A 33 * 34 * @param numberA 操做數A 35 */ 36 public void setNumberA(double numberA) { 37 this.numberA = numberA; 38 } 39 40 /** 41 * 獲取 操做數B 42 * 43 * @return numberB 操做數B 44 */ 45 public double getNumberB() { 46 return this.numberB; 47 } 48 49 /** 50 * 設置 操做數B 51 * 52 * @param numberB 操做數B 53 */ 54 public void setNumberB(double numberB) { 55 this.numberB = numberB; 56 } 57 58 @Override 59 public String toString() { 60 return "Operation{" + 61 "numberA=" + numberA + 62 ", numberB=" + numberB + 63 '}'; 64 } 65 }
運算器子類ide
1 /** 2 * 加法運算類 3 */ 4 public class OperationAdd extends Operation { 5 6 @Override 7 public double getResult() { 8 return super.getNumberA() + super.getNumberB(); 9 } 10 } 11 12 /** 13 * 減法運算類 14 */ 15 public class OperationSub extends Operation { 16 @Override 17 public double getResult() { 18 return super.getNumberA() - super.getNumberB(); 19 } 20 } 21 22 /** 23 * 乘法運算類 24 */ 25 public class OperationMul extends Operation { 26 @Override 27 public double getResult() { 28 return super.getNumberA() * super.getNumberB(); 29 } 30 } 31 32 /** 33 * 除法運算類 34 */ 35 public class OperationDiv extends Operation { 36 @Override 37 public double getResult() { 38 return super.getNumberA() / super.getNumberB(); 39 } 40 }
運算靜態工廠類
1 /** 2 * 運算靜態工廠類 3 */ 4 public class OperationFactory { 5 /** 6 * 建立運算工廠 7 * @param operate 操做符(+ - * /) 8 * @return 匹配運算類 9 */ 10 public static Operation createOperation(String operate) 11 { 12 Operation operation=null; 13 switch (operate) 14 { 15 case "+": 16 operation=new OperationAdd();//建立加法運算類 17 break; 18 case "-": 19 operation=new OperationSub();//建立減法運算類 20 break; 21 case "*": 22 operation=new OperationMul();//建立乘法運算類 23 break; 24 case "/": 25 operation=new OperationDiv();//建立除法運算類 26 break; 27 } 28 return operation; 29 } 30 }
調用端post
/** * 大話設計模式(java版) * 第一章:簡單工廠模式(靜態工廠模式) */ public class StaticFactoryMethodDemo { public static void main(String[] args) { Operation operation = null; double result = 0; operation = OperationFactory.createOperation("+"); operation.setNumberA(1.1); operation.setNumberB(2.2); result = operation.getResult(); System.out.println("加法結果".concat(String.valueOf(result))); operation = OperationFactory.createOperation("-"); operation.setNumberA(3.3); operation.setNumberB(2.2); result = operation.getResult(); System.out.println("減法結果".concat(String.valueOf(result))); operation = OperationFactory.createOperation("*"); operation.setNumberA(3.3); operation.setNumberB(2.2); result = operation.getResult(); System.out.println("乘法結果".concat(String.valueOf(result))); operation = OperationFactory.createOperation("/"); operation.setNumberA(3.3); operation.setNumberB(2.2); result = operation.getResult(); System.out.println("除法結果".concat(String.valueOf(result))); } }
結果this
加法結果3.3000000000000003 減法結果1.0999999999999996 乘法結果7.26 除法結果1.4999999999999998