1.4 KiB
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 一个对象的替代品,在所有需要生成对象的地方都可以使用
- 需要灵活的、可扩展的框架时,可以考虑使用
- 可以用在异构项目中
- 使用在测试驱动开发的框架下
扩展
- 缩小为简单工厂模式(静态工厂模式)
- 升级为多个工厂类
抽象方法中已经不再需要传递相关参数了,因为每一个具体的工厂都已经非常明确自己的职责:创建自己负责的产品类对象
- 替代单例模式
- 延迟初始化
