在了解工厂方法模式之前,有必要对“简单工厂”模式进行一定的了解,简单工厂模式是一种创建型设计模式,但并不属于23种设计模式之一,更多的是一种编程习惯。
简单工厂模式的核心思想是将产品的创建过程封装在一个工厂类中,把创建对象的流程集中在这个工厂类里面。
简单工厂模式包括三个主要角色,工厂类、抽象产品、具体产品,下面的图示则展示了工厂类的基本结构。
Shape 接口,描述产品的通用行为。Circle类和Square类,具体产品通过简单工厂类的if-else逻辑来实例化。简单工厂类简化了客户端操作,客户端可以调用工厂方法来获取具体产品,而无需直接与具体产品类交互,降低了耦合,但是有一个很大的问题就是不够灵活,如果需要添加新的产品,就需要修改工厂类的代码。
工厂方法模式也是一种创建型设计模式,简单工厂模式只有一个工厂类,负责创建所有产品,如果要添加新的产品,通常需要修改工厂类的代码。而工厂方法模式引入了抽象工厂和具体工厂的概念,每个具体工厂只负责创建一个具体产品,添加新的产品只需要添加新的工厂类而无需修改原来的代码,这样就使得产品的生产更加灵活,支持扩展,符合开闭原则。
工厂方法模式分为以下几个角色:
实际上工厂方法模式也很好理解,就拿“手机Phone”这个产品举例,手机是一个抽象产品,小米手机、华为手机、苹果手机是具体的产品实现,而不同品牌的手机在各自的生产厂家生产。