Files
Hui-s-notebook/203-Java/203.1-Java面试/205.19-网络&操作系统/工厂方法模式.md
2023-09-10 10:50:53 +08:00

1.4 KiB

public abstract class AbstractHumanFactory { 
	public abstract <T extends Human> T createHuman(Class<T> c); 
}

public class HumanFactory extends AbstractHumanFactory {
	public <T extends Human> T createHuman(Class<T> c){ 
		//定义一个生产的人种 
		Human human=null; try { 
			//产生一个人种 
			human = (T)Class.forName(c.getName()).newInstance(); 
		} catch (Exception e) { 
		System.out.println("人种生成错误!"); 
		} 
		return (T)human; 
	} 
}

Define an interface for creating an object,but let subclasses decide which class to instantiate.Factory Method lets a class defer instantiation to subclasses.(定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。)

优点

  • 良好的封装性,代码结构清晰
  • 扩展性非常优秀
  • 屏蔽产品类
  • 典型的解耦框架

使用场景

  • new 一个对象的替代品,在所有需要生成对象的地方都可以使用
  • 需要灵活的、可扩展的框架时,可以考虑使用
  • 可以用在异构项目中
  • 使用在测试驱动开发的框架下

扩展

  1. 缩小为简单工厂模式(静态工厂模式)
  2. 升级为多个工厂类

!Pasted image 20230705222905.png

抽象方法中已经不再需要传递相关参数了,因为每一个具体的工厂都已经非常明确自己的职责:创建自己负责的产品类对象

  1. 替代单例模式
  2. 延迟初始化