简介
简单工厂模式,又叫做静态工厂方法模式。由一个静态的工厂决定创建出哪一种产品类的实例。
例子
假设有两个产品, productA 和 productB。我们在 Test 类中并不直接实例化这两个对象,而是先创建一个静态工厂,再用这个工厂创建相应的 product。
总的类关系如下图所示:
可以看出,Test 类只与 Factory 和 产品的接口 IProduct 关联。
具体的代码如下:
IProduct 接口:
public interface IProduct {
public void method();
}
实现类 ProductA
public class ProductA implements IProduct {
@Override
public void method() {
System.out.println("Method for Product [A]");
}
}
实现类 ProductB
public class ProductB implements IProduct {
@Override
public void method() {
System.out.println("Method for Product [B]");
}
}
静态工厂类 Factory
注意工厂的构造函数是 private 的,意味着不能直接实例化出一个工厂对象,只能调用类中的静态方法。
public class Factory {
private Factory() {
}
public static IProduct createProduct(String name) {
if (name == null) {
return null;
}
if (name.equals("A")) {
return new ProductA();
} else if (name.equals("B")) {
return new ProductB();
} else {
throw new IllegalArgumentException("Cannot find product: " + name);
}
}
}
Test 类
public class Test {
public static void main(String[] args) {
IProduct product1 = Factory.createProduct("A");
product1.method();
IProduct product2 = Factory.createProduct("B");
product2.method();
IProduct product3 = Factory.createProduct("C");
product3.method();
}
}
运行结果如下
总结
简单工厂模式实现了创建类和使用类的业务分离,但是,其一个很大的缺点在于,若出现了新的 ProductC, 需要修改 Factory 类中的相应代码。即,简单工厂不满足开闭原则——对扩展开放,对修改封闭。而工厂方法模式为了弥补这个弊端。