简单工厂模式(Simple Factory Pattern)又称静态工厂方法模式,它属于创建型模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单的一种模式,它可以理解为其他工厂模式的一个特殊实现。 下面我将详细介绍简单工厂模式,并提供JAVA代码示例和运行结果。
一、简单工厂模式概述
-
定义 简单工厂模式定义了一个工厂类,根据传入的参数来创建并返回不同类的实例,这些类都实现同一个接口。
-
角色
-
(1)工厂类(Factory):负责创建所有产品的实例。
-
(2)抽象产品类(Product):定义产品的接口。
-
(3)具体产品类(ConcreteProduct):实现抽象产品类的具体产品。
-
优缺点
-
优点:
-
(1)工厂类包含必要的逻辑判断,根据客户端传入的参数,动态创建产品实例。
-
(2)客户端无需知道具体产品类的类名,只需知道所对应的参数即可。
-
(3)减少客户端与具体产品类的耦合。
-
缺点:
-
(1)工厂类集中了所有产品的创建逻辑,一旦工厂类出现问题,整个系统都会受到影响。 (2)新增产品时,需要修改工厂类的代码,违反了开闭原则。
-
二、JAVA代码示例 以下是一个简单工厂模式的示例,以计算器为例,实现加、减、乘、除四种运算。
-
抽象产品类(Operation)
public interface Operation {
double getResult(double numberA, double numberB);
}
-
具体产品类(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;
}
}
-
工厂类(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;
}
}
-
客户端测试类(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
通过以上示例,我们可以看到简单工厂模式的应用。客户端只需知道所需产品的参数,即可通过工厂类获取相应的产品实例。当新增产品时,只需增加一个具体产品类,并在工厂类中增加相应的创建逻辑即可。然而,这种模式也存在一定的局限性,如工厂类过于复杂、违反开闭原则等问题。在实际开发中,应根据具体场景选择合适的工厂模式。