工厂模式(Factory), 定义一个用于创建对象的接口,每个实现子类对应不同的工厂,生产不同的产品,让客户端来决定实例化哪个工厂。
工厂模式VS简单工厂模式 简单工厂模式是一个工厂类对应多个产品类,当需要扩展一个产品时,需要增加一个产品子类(符合扩展开放),并修改工厂类中的case(破坏修改关闭),违背了开闭原则。 工厂模式则为了解决这个问题,扩展一个产品时,需要扩展产品子类和扩展对应的工厂子类,这样都是进行扩展,对于产品这个功能模块是满足开闭原则的。但是客户端使用产品时需要决策实例化哪个工厂类, 从而实例化哪个产品,所以把修改部分放到了客户端。
UML
产品类:
interface IProduct{
public void doSomething();
}
class Product1 implements IProduct{
@Override
public void doSomething(){
System.out.println("product1");
}
}
class Product2 implements IProduct{
@Override
public void doSomething(){
System.out.println("product2");
}
}
工厂类
interface IFactory{
IProduct createProduct();
}
class Factory1 implements IFactory{
@Override
public IProduct createProduct(){
return new Product1();
}
}
class Factory2 implements IFactory{
@Override
public IProduct createProduct(){
return new Product2();
}
}
客户端
public static void main(String[] args) throws Exception{
IFactory factory = new Factory1();
IProduct product = factory.createProduct();
product.doSomething();
}