設計模式-簡單工廠


模式簡介
在三種工廠模式中,簡單工廠模式是最基礎的一個。該模式的核心思想是把創建對象過程和對象本身業務處理分離。假設需要創建多個對象,每個對象的創建模式比較複雜,那麼我們把這些過程放在邏輯代碼中,會使得邏輯代碼非常混亂;而且每當有新的產品出現,就需要修改邏輯代碼,不符合“開閉原則”。

但是,該模式使得工廠的負擔過重,而且每次添加新產品,都需要修改工廠,不是很符合開閉原則,但是比直接在業務邏輯裏添加要好很多了。

模式實現
抽象產品類,所有需要創建產品的基類,是個純虛類
具體產品類,繼承抽象產品,是根據需要添加的功能產品
產品工廠類,負責生產具體產品


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());
    }
}

源碼地址:設計模式示例源碼

部分內容引用自互聯網,如涉及侵權請聯繫本人,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章