1 简介
简单工厂模式不属于23种设计模式(工厂模式的简化)
定义
定义一个创建产品对象的工厂接口,将产品对象的实际创建工作放到工厂类当中
简单工厂一般分为
普通简单工厂
多方法简单工厂
静态方法简单工厂
缺点
违背了开闭原则
当需要增加一个新的功能时(eg:增加乘法运算),需要添加一个乘法运算实体类,然后修改工厂类
2 UML图介绍
2.1 类

类
运算符矩形框,代表一个类(Class)
类图分三层
第一层
类的名称,如果是抽象类,则用斜体表示
第二层
类的字段和属性
第三层
类的方法
前面的符号
+ 表示 public
- 表示 private
# 表示 protected
2.2 继承(extends)

继承
继承用 空三角+实线 表示
当一个类继承另一个类时,用继承

鸟继承动物
2.3 关联

关联
关联用 实线箭头 表示
当一个类知道另一个类时,用关联
public class 企鹅{
private 气候 x;
}

企鹅关联(知道)气候
3 普通简单工厂
3.1 UML图

普通简单工厂
3.2 git
git
https://github.com/3748/java.git
package
com.java.design.pattern.creation.factory.simple.multiple.methods
3.3 代码
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* 运算父类
*
* @author gp6
* @date 2019/12/10
*/
@Setter
@Getter
public class FactoryOperation implements Serializable {
private static final long serialVersionUID = 1025552182336091475L;
/**
* 获取结果
*
* @return 结果
*/
public String getResult() {
return "我是父类";
}
}
/**
* 加法运算
*
* @author gp6
* @date 2019/12/10
*/
public class FactoryOperationAdd extends FactoryOperation {
private static final long serialVersionUID = 3069555143330440903L;
@Override
public String getResult() {
return "我是加法";
}
}
/**
* 减法运算
*
* @author gp6
* @date 2019/12/10
*/
public class FactoryOperationSub extends FactoryOperation {
private static final long serialVersionUID = -1565237675930634070L;
@Override
public String getResult() {
return "我是减法";
}
}
/**
* 操作符枚举
*
* @author gp6
* @date 2019/12/16
*/
public enum OperateEnum {
ADD("+"),
SUB("-"),
MUL("*"),
DIV("/");
private String operate;
OperateEnum(String operate) {
this.operate = operate;
}
public String getOperate() {
return operate;
}
/**
* 匹配操作符
*
* @param operate 操作符
* @return 相关枚举
*/
public static OperateEnum matchOperate(String operate) {
for (OperateEnum operateEnum : OperateEnum.values()) {
if (operateEnum.getOperate().equalsIgnoreCase(operate)) {
return operateEnum;
}
}
return OperateEnum.ADD;
}
}
/**
* 运算工厂
*
* @author gp6
* @date 2019/12/10
*/
public class OperationSimpleOrdinaryFactory {
/**
* 创建运算类
*
* @param operate 操作符
* @return 运算类
*/
public FactoryOperation createOperation(String operate) {
FactoryOperation operation;
OperateEnum operateEnum = OperateEnum.matchOperate(operate);
switch (operateEnum) {
case ADD:
operation = new FactoryOperationAdd();
break;
case SUB:
operation = new FactoryOperationSub();
break;
default:
operation = new FactoryOperationMul();
}
return operation;
}
}
/**
* 普通简单工厂测试
*
* @author gp6
* @date 2019/12/10
*/
public class TestOrdinarySimpleFactory {
public static void main(String[] args) {
// 加法
FactoryOperation operationAdd = new OperationSimpleOrdinaryFactory().createOperation("+");
System.out.println(operationAdd.getResult());
// 减法
FactoryOperation operationSub = new OperationSimpleOrdinaryFactory().createOperation("-");
System.out.println(operationSub.getResult());
}
}
4 多方法简单工厂
4.1 git
git
https://github.com/3748/java.git
package
com.java.design.pattern.creation.factory.simple.multiple.methods
4.2 代码
/**
* 运算工厂
*
* @author gp6
* @date 2019/12/10
*/
public class OperationSimpleMethodsFactory {
/**
* 创建加法对象
*
* @return 运算父类
*/
public FactoryOperation createAdd() {
return new FactoryOperationAdd();
}
/**
* 创建减法对象
*
* @return 运算父类
*/
public FactoryOperation createSub() {
return new FactoryOperationSub();
}
}
/**
* 多方法简单工厂测试
*
* @author gp6
* @date 2019/12/10
*/
public class TestMethodsSimpleFactory {
public static void main(String[] args) {
// 加法运算
FactoryOperation operationAdd = new OperationSimpleMethodsFactory().createAdd();
System.out.println(operationAdd.getResult());
// 减法运算
FactoryOperation operationSub = new OperationSimpleMethodsFactory().createSub();
System.out.println(operationSub.getResult());
}
}
5 静态方法简单工厂
5.1 git
git
https://github.com/3748/java.git
package
com.java.design.pattern.creation.factory.simple.statics
5.2 代码
/**
* 运算工厂
*
* @author gp6
* @date 2019/12/10
*/
public class OperationSimpleStaticFactory {
/**
* 创建加法对象
*
* @return 运算父类
*/
public static FactoryOperation createAdd() {
return new FactoryOperationAdd();
}
/**
* 创建减法对象
*
* @return 运算父类
*/
public static FactoryOperation createSub() {
return new FactoryOperationSub();
}
}
/**
* 静态方法简单工厂测试
*
* @author gp6
* @date 2019/12/10
*/
public class TestMethodsSimpleFactory {
public static void main(String[] args) {
// 加法运算
FactoryOperation operationAdd = OperationSimpleStaticFactory.createAdd();
System.out.println(operationAdd.getResult());
// 减法运算
FactoryOperation operationSub = OperationSimpleStaticFactory.createSub();
System.out.println(operationSub.getResult());
}
}
6 静态方法与普通简单工厂结合(通常使用)
6.1 git
git
https://github.com/3748/java.git
package
com.java.design.pattern.creation.factory.simple.used
6.2 代码
/**
* 运算工厂
*
* @author gp6
* @date 2019/12/10
*/
public class OperationSimpleUsedFactory {
/**
* 创建运算类
*
* @param operate 操作符
* @return 运算类
*/
public static FactoryOperation createOperation(String operate) {
FactoryOperation operation;
OperateEnum operateEnum = OperateEnum.matchOperate(operate);
switch (operateEnum) {
case ADD:
operation = new FactoryOperationAdd();
break;
case SUB:
operation = new FactoryOperationSub();
break;
default:
operation = new FactoryOperationMul();
}
return operation;
}
}
/**
* 普通简单工厂测试
*
* @author gp6
* @date 2019/12/10
*/
public class TestUsedSimpleFactory {
public static void main(String[] args) {
String operate = "+";
// 根据字符串获取相应的运算类
FactoryOperation operation = OperationSimpleUsedFactory.createOperation(operate);
System.out.println(operation.getResult());
}
}
网友评论