设计模式(3):工厂模式(工厂方法模式)

176 阅读1分钟

工厂模式

上一节介绍了简单工厂模式,但是实际上简单工程模式也违反了开闭原则。如果我们有新增的产品,那么就必须在工厂中增加相应的创建代码,后期维护起来比较麻烦(但是也有简单易实现的有点、适合小项目和小Demo)。工厂模式稍微复杂一点,但是解决了这些问题。

定义

定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。

使用步骤和示例代码

  1. 定义产品接口(抽象的产品)
public interface Product {
    void function();
}
  1. 定义产品接口的实现类(具体的产品)
//产品A
public class ProductA implements Product {
    @Override
    public void fucntion() {
        System.out.println("A产品的功能执行了");
    }
}

//产品B
public class ProductB implements Product {
    @Override
    public void fucntion() {
        System.out.println("B产品的功能执行了");
    }
}
  1. 定义工厂接口(抽象的工厂),在接口中定义创建方法
public interface Factory {
    Product createProduct();
}
  1. 定义接口的实现类(具体的工厂),并实现具体的创建方法
public class ProductAFactory {
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

public class ProductBFactory {
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}

在使用的时候,我们使用对应的工厂生产对应的产品。

public class Client {
    public static void main(String[] args) {
        //A产品
        Factory aFactory = new ProductAFactory();
        Product a = aFactory.createProduct();
        
        //b产品
        Factory bFactory = new ProductBFactory();
        Product b = bFactory.createProduct();
    }
}

总结

工厂模式相比于简单工厂模式解决了开闭原则的问题,但是也可以看到工厂模式的代码会多一些,每新增加一个具体产类品就要新增加一个对应的工厂。