设计模式-工厂模式

工厂模式(Factory), 定义一个用于创建对象的接口,每个实现子类对应不同的工厂,生产不同的产品,让客户端来决定实例化哪个工厂。

工厂模式VS简单工厂模式 简单工厂模式是一个工厂类对应多个产品类,当需要扩展一个产品时,需要增加一个产品子类(符合扩展开放),并修改工厂类中的case(破坏修改关闭),违背了开闭原则。 工厂模式则为了解决这个问题,扩展一个产品时,需要扩展产品子类和扩展对应的工厂子类,这样都是进行扩展,对于产品这个功能模块是满足开闭原则的。但是客户端使用产品时需要决策实例化哪个工厂类, 从而实例化哪个产品,所以把修改部分放到了客户端。

UML

factory

产品类:

    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();
    }