模式简介
在三种工厂模式中,简单工厂模式是最基础的一个。该模式的核心思想是把创建对象过程和对象本身业务处理分离。假设需要创建多个对象,每个对象的创建模式比较复杂,那么我们把这些过程放在逻辑代码中,会使得逻辑代码非常混乱;而且每当有新的产品出现,就需要修改逻辑代码,不符合“开闭原则”。
但是,该模式使得工厂的负担过重,而且每次添加新产品,都需要修改工厂,不是很符合开闭原则,但是比直接在业务逻辑里添加要好很多了。
模式实现
抽象产品类,所有需要创建产品的基类,是个纯虚类
具体产品类,继承抽象产品,是根据需要添加的功能产品
产品工厂类,负责生产具体产品
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());
}
}
源码地址:设计模式示例源码
部分内容引用自互联网,如涉及侵权请联系本人,谢谢!