3.1 简单工厂模式
什么是简单工厂模式?
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一。
简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。不修改代码的话,是无法扩展的。
UML类图如下:
代码:
Product
public interface Product { public void operation1(); public void operation2(); }
ConcreateProductA
public class ConcreateProductA implements Product { public void operation1() { System.out.println("ConcreateProductA -> operation1"); } public void operation2() { System.out.println("ConcreateProductA -> operation2"); } }
ConcreateProductB
public class ConcreateProductB implements Product { public void operation1() { System.out.println("ConcreateProductB -> operation1"); } public void operation2() { System.out.println("ConcreateProductB -> operation2"); } }
SimpleFactory
public class SimpleFactory { public static Product create(String type){ Product product = null; if("A".equals(type)){ product = new ConcreateProductA(); } else if("B".equals(type)){ product = new ConcreateProductB(); } return product; } }
Client
public class Client { public static void main(String[] args) { Product productA = SimpleFactory.create("A"); productA.operation1(); productA.operation2(); Product productB = SimpleFactory.create("B"); productB.operation1(); productB.operation2(); } }
什么场景下使用简单工厂模式?
(1)多种相同类型的产品(为什么不使用类的构造函数直接初始化)
(2)产品的类型比较固定(简单工厂模式不支持扩展,一旦扩展需要修改已有代码)
(3)产品的初始化比较复杂(为什么不使用类的构造函数直接初始化)
使用简单工厂模式的例子有:
(1)Spring的bean工厂模式,通过getBean获取产品,所有的产品都继承于Object
什么场景不能使用简单工厂模式?
(1)产品类型不固定,变化性比较大
(2)产品只有一种且产品的初始化很简单