Intent
创建对象时不向客户暴露内部细节, 并提供一个创建对象的通用接口.
Class Diagram
简单工厂将实例化的操作单独放到一个类中,该类即简单工厂类,让简单工厂类来决定应该用哪个具体子类来实例化。
这样做能把客户类和具体子类的实现解耦,客户类不再需要知道有哪些子类以及应当实例化哪个子类。
客户类往往有多个,如果不使用简单工厂,那么所有的客户类都要知道所有子类的细节。而且一旦子类发生改变,例如增加子类,那么所有的客户类都要进行修改。
Implementation
public interface Product {}
public class ConcreteProduct implements Product {
public ConcreteProduct() {
System.out.println("ConcreteProduct has been created");
}
}
public class ConcreteProduct1 implements Product {
public ConcreteProduct1() {
System.out.println("ConcreteProduct1 has been created");
}
}
public class ConcreteProduct2 implements Product {
public ConcreteProduct2() {
System.out.println("ConcreteProduct2 has been created");
}
}
简单工厂类
public class SimpleFactory {
public Product createProduct(int type){
if (type == 1){
return new ConcreteProduct1();
}else if (type == 2){
return new ConcreteProduct2();
}else {
return new ConcreteProduct();
}
}
}
客户端根据需要创建Product类
public class Client {
public static void main(String[] args) {
SimpleFactory simpleFactory = new SimpleFactory();
for (int i = 0; i < 3; i++){
simpleFactory.createProduct(i);
}
}
}