工厂
- 灵活控制生产过程
- 实现权限、修饰、日志等功能
1. 简单工厂
package org.example.factory;
public class SimpleVehicleFactory {
public Car createCar() {
// 业务处理等
return new Car();
}
public Plane createPlane() {
return new Plane();
}
}
缺点: 可扩展性差, 新加功能需要修改原有代码
2. 工厂方法
针对每一个产品创建一个工厂
Car - CarFactory
Plane - PlaneFactory
3. 抽象工厂
package org.example.factory;
public abstract class AbstractFactory {
abstract Food createFood();
abstract Vehicle createVehicle();
abstract Weapon createWeapon();
}
这个工厂产出了一组产品(产品族)
当需要创建一组产品时,定义一个继承自AbstractFactory
的工厂类,例如:
package org.example.factory;
public class ModernFactory extends AbstractFactory {
@Override
Food createFood() {
return new Bread();
}
@Override
Vehicle createVehicle() {
return new Car();
}
@Override
Weapon createWeapon() {
return new AK47();
}
}
类的关系图如下:
4. 总结
在工厂方法的基础上扩展
这样其实也算是一种只生产一种产品的抽象工厂。
工厂方法: 在产品方向上容易扩展(有新的产品,添加一个新的相应工厂即可)
抽象工厂: 在产品族方向上容易扩展,在产品方向上不易扩展(比如:原先工厂生产由3类产品组成的产品族,现在要改成4类,就比较麻烦了)