定义


简单工厂模式

严格来说不属于 GoF 的 23 种设计模式,而是一种编程习惯。
定义一个工厂类,根据传入的参数,动态决定创建哪一个产品类的实例。
一个具体工厂,多个抽象产品,多个具体产品。

实现


public interface Product {
}
 
public class ProductA implements Product {
}
 
public class ProductB implements Product {
}
 
public class ProductFactory {
	public static Product createProduct(String type) {
		if("ProductA".equalsIgnoreCase(type)) {
			return new ProductA();
		} else if("ProductB".equalsIgnoreCase(type)) {
			return new ProductB();
		}
		return null;
	}
}

优点

  • 封装:将创建对象的过程封装起来,调用方不需要关心对象创建的过程。
  • 解耦:调用者只需要使用实例而不需要创建实例。
    缺点
  • 违反开闭原则:如果需要添加新的产品,需要修改工厂类的创建方法。
  • 无法继承:使用的静态工厂方法不能被继承和重写,无法扩展子工厂。