2 简单工厂模式

作者: 笑Skr人啊 | 来源:发表于2019-12-31 14:01 被阅读0次

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

相关文章

  • 设计模式-工厂模式

    设计模式1 设计模式2 工厂模式 工厂模式可简单的分为三类:简单工厂,工厂方法,抽象工厂 简单工厂模式 定义 简单...

  • 设计模式 工厂模式

    工厂模式 工厂模式三大类1、简单工厂模式(静态工厂方法模式)2、工厂方法模式3、抽象工厂模式(Kit模式) 简单工...

  • php设计模式之工厂模式

    1. 工厂模式分类 工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式; 2. 简单工厂模式 又...

  • 设计模式-工厂模式

    1、简单工厂模式 2、工厂方法模式 3、抽象工厂模式

  • 工厂方法模式

    1.简单工厂模式 先看一下简单工厂模式 代码: 2.工厂方法模式 简单工厂模式大家比较熟悉也比较简单,但是简单工厂...

  • Java设计模式——Factory工厂模式

    Factory工厂模式分为:1)简单工厂模式(Simple Factory) --- 普通工厂模式2)工厂方法模式...

  • 设计模式之工厂模式

    1.简单工厂模式 2.抽象工厂模式

  • Java中的工厂模式

    1.简单工厂模式 2.常规工厂模式

  • iOS知识点整理

    一、工厂模式 1、简介 2、简单工厂模式 2、抽象工厂模式 二、Swift与Objective_C

  • Java 设计模式1-简单工厂模式

    简单工厂模式不属于标准的Java 23设计模式之内。根据分类,简单工厂模式又分类为:1.普通简单工厂模式。2.多方...

网友评论

    本文标题:2 简单工厂模式

    本文链接:https://www.haomeiwen.com/subject/qpcboctx.html