1. 什么是工厂方法?
工厂方法类似简单工厂,只不过将对象实例化延迟到了子类来实现。
工厂方法定义: 定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到其子类。
好处:在父类不知道具体实现的情况下,完成自身功能的调用;而具体的实现延迟到子类来实现。
2. 代码示例
定义一个创建对象的接口:
代码语言:javascript复制// 创建对象的接口
public interface Product {...}
定义接口实现类
代码语言:javascript复制// Product实现类
public class ProductImpl implements Product{...}
定义创建对象类,一般为抽象类,该类就是工厂方法
代码语言:javascript复制//工厂方法,用于创建对象,但是不直接在这里创建,而是延迟到子类创建
public abstract calss ProductCreator {
// 创建对象的抽象方法
protected abstract Product factoryMethod();
}
在抽象类子类中创建接口对象
代码语言:javascript复制public class ProductCreatorImpl extends ProductCreator {
protected Product factoryMethod(){
return new ProductImpl();//创建Product实例
}
}
从代码可以看出,我们并没有在工厂方法中直接创建对象,而是将其延迟到了,子类来创建。工厂类只是定义了一些功能,并没有提供具体的实现,正好满足抽象类的条件,因而常常定义为一个抽象类。
3. 适用场景
- 工厂方法是站在设计原则的角度来设计的。(适用于架构师)
- 简单工厂是站在具体业务场景中设计的。(适用于编码者)