工厂方法
定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法的优点
- 良好的封装性,代码结构清晰。
- 优秀的可扩展性。
- 屏蔽产品类。产品类的实现如何变化,调用者都不需要关心。只需要关心产品接口。
- 工厂方法模式是典型的解偶框架。高层模块只需要知道产品的抽象类,其他实现类都不用关心。
工厂方法的使用场景
- 工厂方法模式是new一个对象的替代品,因此所有需要生成对象的地方都可以使用。
- 需要灵活的、可扩展的框架时,可以考虑采用工厂方法模式。
- 工厂方法可以用在异构项目中。
- 工厂方法模式可以使用在测试驱动开发的框架下。
示例代码
- 水果工厂接口
public interface FruitGardener {
public Fruit factory();
}
- 苹果工厂实现类
public class AppleGardener implements FruitGardener {
@Override
public Fruit factory() {
return new Apple();
}
}
- 水果接口
public interface Fruit {
// 生长
public void grow();
// 收获
public void harvest();
// 栽种
public void plant();
}
- 苹果类
public class Apple implements Fruit {
@Override
public void grow() {
System.out.println("苹果正在生长...");
}
@Override
public void harvest() {
System.out.println("收获苹果");
}
@Override
public void plant() {
System.out.println("栽种苹果");
}
}
- 主逻辑
public class ClientDemo {
FruitGardener fruitGardener;
public ClientDemo(FruitGardener fruitGardener){
this.fruitGardener = fruitGardener;
}
public static void main(String[] args) {
ClientDemo clientDemo = new ClientDemo(new AppleGardener());
Fruit apple = clientDemo.fruitGardener.factory();
apple.plant();
apple.grow();
apple.harvest();
}
}