工厂方法模式(Factory Method)是定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
工厂模式中的角色:
- Product:抽象产品类。
- ConcreteProduct:具体产品类,实现 Product 接口。
- Factory:抽象工厂类,该方法返回一个 Product 类型的对象。
- ConcreteFactory:具体工厂类,返回 ConcreteProduct 实例。
工厂方法模式的简单实现
工厂方法模式的抽象产品类与具体产品类的创建和简单工厂模式是一样的。
(1) 创建抽象工厂
public abstract class IOperationFactory {
public abstract <T extends Operation> T createOperate(Class<T> clz);
}
(2) 具体工厂
继承抽象工厂,通过反射来使用不同的计算器。
public class OperationFactory extends IOperationFactory {
@Override
public <T extends Operation> T createOperate(Class<T> clz) {
Operation operation = null;
String className = clz.getName();
try {
operation = (Operation) Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return (T)operation;
}
}
(3) 客户端调用
public class Calculator {
public static void main(String[] args) {
IOperationFactory iOperationFactory = new OperationFactory();
Operation operation = iOperationFactory.createOperate(OperationAdd.class);
operation.setX(10);
operation.setY(20);
try {
System.out.print("结果:" + operation.getResult());
} catch (Exception e) {
e.printStackTrace();
}
}
}
工厂方法和简单工厂
对于简单工厂模式,其在工厂类中包含了必要的逻辑判断,根据不同的条件来动态实例化相关的类,如果需要增加一个产品,需要修改工厂类,这违背了开放封闭原则。工厂模式没有违背这个开发封闭原则,无须修改工厂类,直接创建产品即可。
网友评论