模式簡介
在三種工廠模式中,簡單工廠模式是最基礎的一個。該模式的核心思想是把創建對象過程和對象本身業務處理分離。假設需要創建多個對象,每個對象的創建模式比較複雜,那麼我們把這些過程放在邏輯代碼中,會使得邏輯代碼非常混亂;而且每當有新的產品出現,就需要修改邏輯代碼,不符合“開閉原則”。
但是,該模式使得工廠的負擔過重,而且每次添加新產品,都需要修改工廠,不是很符合開閉原則,但是比直接在業務邏輯裏添加要好很多了。
模式實現
抽象產品類,所有需要創建產品的基類,是個純虛類
具體產品類,繼承抽象產品,是根據需要添加的功能產品
產品工廠類,負責生產具體產品
UML類圖
案例:計算器(加、減、乘、除……)
Operation.java
package com.codetears.SimpleFactory.operation;
/**
* @Description 運算
* @Date 2019-05-13 10:26
* @Author l'amour solitaire
*/
public class Operation {
protected Double result;
public Double doOperation() {
return result;
}
}
AddOperation.java
package com.codetears.SimpleFactory.operation;
/**
* @Description 加法
* @Date 2019-05-13 10:26
* @Author l'amour solitaire
*/
public class AddOperation extends Operation {
private Double numA, numB;
public AddOperation(Double numA, Double numB) {
this.numA = numA;
this.numB = numB;
}
public Double doOperation() {
return super.result = numA + numB;
}
}
OperationFactory.java
package com.codetears.SimpleFactory;
import com.codetears.SimpleFactory.operation.AddOperation;
import com.codetears.SimpleFactory.operation.MulOperation;
import com.codetears.SimpleFactory.operation.Operation;
import com.codetears.SimpleFactory.operation.SubOperation;
/**
* @Description 代理工廠
* @Date 2019-05-13 10:27
* @Author l'amour solitaire
*/
public class OperationFactory {
protected static Operation operation(Double numA, Double numB, String operation) {
switch (operation) {
case "+":
return new AddOperation(numA, numB);
case "-":
return new SubOperation(numA, numB);
case "*":
return new MulOperation(numA, numB);
default:
return new AddOperation(numA, numB);
}
}
}
測試:
package com.codetears.SimpleFactory;
import java.util.Scanner;
/**
* @Description 測試
* @Date 2019-05-13 10:27
* @Author l'amour solitaire
*/
public class Client {
public static void main(String[] args) {
System.out.println("請輸入數字A");
Scanner a = new Scanner(System.in);
Double numA = a.nextDouble();
System.out.println("請輸入數字B");
Scanner b = new Scanner(System.in);
Double numB = b.nextDouble();
System.out.println("請輸入運算操作");
Scanner operation = new Scanner(System.in);
System.out.println("運算結果爲: " + OperationFactory.operation(numA, numB, operation.nextLine()).doOperation());
}
}
源碼地址:設計模式示例源碼
部分內容引用自互聯網,如涉及侵權請聯繫本人,謝謝!