设计模式-简单工厂


模式简介
在三种工厂模式中,简单工厂模式是最基础的一个。该模式的核心思想是把创建对象过程和对象本身业务处理分离。假设需要创建多个对象,每个对象的创建模式比较复杂,那么我们把这些过程放在逻辑代码中,会使得逻辑代码非常混乱;而且每当有新的产品出现,就需要修改逻辑代码,不符合“开闭原则”。

但是,该模式使得工厂的负担过重,而且每次添加新产品,都需要修改工厂,不是很符合开闭原则,但是比直接在业务逻辑里添加要好很多了。

模式实现
抽象产品类,所有需要创建产品的基类,是个纯虚类
具体产品类,继承抽象产品,是根据需要添加的功能产品
产品工厂类,负责生产具体产品


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

源码地址:设计模式示例源码

部分内容引用自互联网,如涉及侵权请联系本人,谢谢!

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