Bootstrap

简单工厂模式

简单工厂模式(Simple Factory Pattern)又称静态工厂方法模式,它属于创建型模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单的一种模式,它可以理解为其他工厂模式的一个特殊实现。 下面我将详细介绍简单工厂模式,并提供JAVA代码示例和运行结果。

一、简单工厂模式概述

  1. 定义 简单工厂模式定义了一个工厂类,根据传入的参数来创建并返回不同类的实例,这些类都实现同一个接口。

  2. 角色

  3. (1)工厂类(Factory):负责创建所有产品的实例。

  4. (2)抽象产品类(Product):定义产品的接口。

  5. (3)具体产品类(ConcreteProduct):实现抽象产品类的具体产品。

  6. 优缺点

  7. 优点:

  8. (1)工厂类包含必要的逻辑判断,根据客户端传入的参数,动态创建产品实例。

  9. (2)客户端无需知道具体产品类的类名,只需知道所对应的参数即可。

  10. (3)减少客户端与具体产品类的耦合。

  11. 缺点:

  12. (1)工厂类集中了所有产品的创建逻辑,一旦工厂类出现问题,整个系统都会受到影响。 (2)新增产品时,需要修改工厂类的代码,违反了开闭原则。

  13. 二、JAVA代码示例 以下是一个简单工厂模式的示例,以计算器为例,实现加、减、乘、除四种运算。

  14. 抽象产品类(Operation)

public interface Operation {
    double getResult(double numberA, double numberB);
}
  1. 具体产品类(Add、Subtract、Multiply、Divide)

public class Add implements Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        return numberA + numberB;
    }
}
public class Subtract implements Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        return numberA - numberB;
    }
}
public class Multiply implements Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        return numberA * numberB;
    }
}
public class Divide implements Operation {
    @Override
    public double getResult(double numberA, double numberB) {
        if (numberB == 0) {
            throw new IllegalArgumentException("除数不能为0");
        }
        return numberA / numberB;
    }
}
  1. 工厂类(OperationFactory)

public class OperationFactory {
    public static Operation createOperation(String operate) {
        Operation operation = null;
        switch (operate) {
            case "+":
                operation = new Add();
                break;
            case "-":
                operation = new Subtract();
                break;
            case "*":
                operation = new Multiply();
                break;
            case "/":
                operation = new Divide();
                break;
            default:
                throw new IllegalArgumentException("不支持该运算符");
        }
        return operation;
    }
}
  1. 客户端测试类(Test)

public class Test {
    public static void main(String[] args) {
        Operation operation = OperationFactory.createOperation("+");
        double result = operation.getResult(10, 5);
        System.out.println("计算结果:" + result);
    }
}

三、运行结果

计算结果:15.0

通过以上示例,我们可以看到简单工厂模式的应用。客户端只需知道所需产品的参数,即可通过工厂类获取相应的产品实例。当新增产品时,只需增加一个具体产品类,并在工厂类中增加相应的创建逻辑即可。然而,这种模式也存在一定的局限性,如工厂类过于复杂、违反开闭原则等问题。在实际开发中,应根据具体场景选择合适的工厂模式。

;