定义


工厂方法模式

定义一个工厂的接口,但由子类决定实例化哪一个类,使得一个类的实例化延迟到子类。
一个抽象工厂,多个具体工厂,一个抽象产品,多个具体产品。

实现


public interface Product {
}
 
public class ProductA implements Product {
}
 
public class ProductB implements Product {
}
 
public interface Factory{
	Product createProduct();
}
 
public class ProductAFactory implements Factory{
	public Product createProduct(){
		return new ProductA();
	}
}
 
public class ProductBFactory implements Factory{
	public Product createProduct(){
		return new ProductB();
	}
}

优点

  • 封装:将创建对象的过程封装起来,调用方不需要关心对象创建的过程。
  • 解耦:调用者只需要使用实例而不需要创建实例。
  • 遵循开闭原则:无需修改现有客户端代码,就可以引入新的产品类型。
    缺点
  • 类的数量过多:每增加一个产品就要编写一个具体工厂类,导致类的数量翻倍。