设计模式-简单工厂模式

核心理念

  • 根据不同的参数返回不同的实例
  • 专门用一个类来创建其它类的实例
  • 创建的类都具用共同的父类

优缺点

优点

  • 对象的创建和业务的处理分离开来,可以降低系统的耦合性
  • 新增业务只需新增处理类即可,不影响原来的业务处理类

缺点

  • 工厂类需要根据参数判断返回的类,与开闭原则有点相违背

代码示例

操作类

java 复制代码
public abstract class Operation {

    private double numberA;

    private double numberB;

    public double getNumberA() {
        return numberA;
    }

    public void setNumberA(double numberA) {
        this.numberA = numberA;
    }

    public double getNumberB() {
        return numberB;
    }

    public void setNumberB(double numberB) {
        this.numberB = numberB;
    }

    public abstract double getResult();
}

简单工厂类

java 复制代码
public class OperationFactory {
    public Operation createOperate(String operate){
        if("+".equals(operate)){
            return new AddOperation();
        } else if("-".equals(operate)){
            return new SubOperation();
        }else{
            return null;
        }
    }
}

加法运算类

java 复制代码
public  class AddOperation extends Operation {
    @Override
    public double getResult() {
        return getNumberA() + getNumberB();
    }
}

减法运算类

java 复制代码
public  class SubOperation extends Operation {
    @Override
    public double getResult() {
        return getNumberA() - getNumberB();
    }
}

测试

java 复制代码
public class AppRun {
    public static void main(String[] args) {
        OperationFactory operationFactory = new OperationFactory();
        Operation operate = operationFactory.createOperate("+");
        operate.setNumberA(1.2);
        operate.setNumberB(33.3);
        System.out.println(operate.getResult());
    }
}
相关推荐
程序员三明治2 分钟前
【AI】一文讲清 RAG:从大模型局限到企业级知识库落地流程
java·人工智能·后端·ai·大模型·llm·rag
Devin~Y3 分钟前
大厂 Java 面试实录:Spring Boot/Cloud、Kafka、Redis、JVM、K8s、RAG 一条龙(小Y翻车版)
java·jvm·spring boot·redis·spring cloud·kafka·kubernetes
无限进步_3 分钟前
【C++】深入右值引用:移动语义与完美转发
java·开发语言·c++
霑潇雨5 分钟前
原生 Zookeeper 实现分布式锁案例
java·分布式·zookeeper·云原生·maven
小王C语言5 分钟前
【线程同步与互斥】:互斥量(锁)、条件变量(唤醒等待线程)、生产者消费者模型
java·开发语言
我命由我123458 分钟前
Jetpack Compose - 设置 Compose 编译器、设置 Compose 依赖项
android·java·java-ee·kotlin·android jetpack·android-studio·android runtime
l软件定制开发工作室12 分钟前
Spring开发系列教程(37)——使用Conditional
java·后端·spring
代码漫谈14 分钟前
Spring Boot日志配置全攻略:打造高效、可靠的日志系统
java·spring boot·log4j·日志
Forget the Dream15 分钟前
基于适配器模式的 Axios 封装实践
设计模式·typescript·axios·适配器模式
ideal-cs17 分钟前
总结:生产环境Release、Snapshot两种包版本该如何管理与发布构建
java·maven·snapshot·release