设计模式-简单工厂模式
这章主要记录了简单工厂模式
一、什么是简单工厂模式
- 简单工厂模式 (Simple Factory Pattern),又被称为静态方法工厂模式
- 由一个工厂对象决定创建出哪一种产品类的实例
- 优点:
- 在工厂类中包含了必要的逻辑判断,可以根据客户端的选择条件动态地实例化相关的类
- 对于客户端来说,去除了与具体产品的依赖,只需要负责消费对象,而不用关心对象究竟是如何产生的
- 缺点:
- 扩展性较差,由于工厂类集中了所有实例的创建逻辑,
当我们需要添加新的产品时,就不得不去修改原有的工厂类 - 这种做法不但对扩展开放了,也对修改开放了,也就是说违背了 开放-封闭原则
- 扩展性较差,由于工厂类集中了所有实例的创建逻辑,
- 使用场景:
- 由工厂类负责创建的对象比较少时使用
- 客户只需要传入工厂类的参数, 而不需要关心对象如何产生时使用
二、简单工厂模式UML图
三、简单工厂模式示例
运算方法抽象类
/**
* @Title: Operation.java
* @Description: 运算方法抽象类
* @Author: xj
* @Date: 2018/8/11 9:37
*/
public abstract class Operation {
public abstract double getResult(double numberA, double numberB) throws Exception;
}
运算方法具体实现
/**
* @Title: OperationAdd.java
* @Description: 加法类
* @Author: xj
* @Date: 2018/8/11 9:40
*/
public class OperationAdd extends Operation {
@Override
public double getResult(double numberA, double numberB) {
return numberA + numberB;
}
}
/**
* @Title: OperationSub.java
* @Description: 减法类
* @Author: xj
* @Date: 2018/8/11 9:44
*/
public class OperationSub extends Operation {
@Override
public double getResult(double numberA, double numberB) {
return numberA - numberB;
}
}
/**
* @Title: OperationMul.java
* @Description: 乘法类
* @Author: xj
* @Date: 2018/8/18 14:26
*/
public class OperationMul extends Operation {
@Override
public double getResult(double numberA, double numberB) {
return numberA * numberB;
}
}
/**
* @Title: OperationDiv.java
* @Description: 除法类
* @Author: xj
* @Date: 2018/8/18 14:27
*/
public class OperationDiv extends Operation {
@Override
public double getResult(double numberA, double numberB) throws Exception {
if (numberB == 0) {
throw new Exception("除数不能为0");
}
return numberA / numberB;
}
}
运算方法工厂类
/**
* @Title: OperationFactory.java
* @Description: 运算方法工厂类
* @Author: xj
* @Date: 2018/8/11 9:45
*/
public class OperationFactory {
public static Operation getOperation(String operation) {
switch (operation) {
case "+": return new OperationAdd();
case "-": return new OperationSub();
case "*": return new OperationMul();
case "/": return new OperationDiv();
default: return null;
}
}
}
测试类
/**
* @Title: Test.java
* @Description: 测试类
* @Author: xj
* @Date: 2018/8/11 9:48
*/
public class Test {
public static void main(String[] args) throws Exception {
Operation operationAdd = OperationFactory.getOperation("+");
if (operationAdd != null) {
double result = operationAdd.getResult(20, 5); // 25.0
System.out.println(result);
}
Operation operationSub = OperationFactory.getOperation("-");
if (operationSub != null) {
double result = operationSub.getResult(20, 5); // 15.0
System.out.println(result);
}
Operation operationMul = OperationFactory.getOperation("*");
if (operationMul != null) {
double result = operationMul.getResult(20, 5); // 100.0
System.out.println(result);
}
Operation operationDiv = OperationFactory.getOperation("/");
if (operationDiv != null) {
double result = operationDiv.getResult(20, 5); // 4.0
System.out.println(result);
}
}
}
以上就是简单工厂模式的一个小例子

浙公网安备 33010602011771号