常见的工厂模式有两种一种是工厂方法,一种是抽象工厂。工厂方法在产品维度上可扩展性更高,抽象工厂在产品族这一维度上更易于扩展。
工厂方法
先创建一个或多个实体类,再创建一个xxxFactory工厂类中写一个create方法再方法中完成对象的初始化。适用于产品维度是线性扩展,产品与产品之间互不关联。添加一个新的产品就添加一个新的工厂类。
抽象工厂
适用于树状产品族的扩展,例如:
我们就可以建立一个抽象工厂类,类中有三个方法分别选择食品、交通工具和武器。再根据具体要求写实现工厂类返回你所需要的产品
抽象工厂类
package factory;
import pojo.abs.Food;
import pojo.abs.Vehicle;
import pojo.abs.Weapon;
public abstract class AbstractFactory {
abstract Food createFood();
abstract Vehicle createVehicle();
abstract Weapon createWeapon();
}
实现工厂类
package factory;
import pojo.AK47;
import pojo.Bread;
import pojo.Car;
import pojo.abs.Food;
import pojo.abs.Vehicle;
import pojo.abs.Weapon;
public class MordenFactory extends AbstractFactory {
@Override
Food createFood() {
return new Bread();
}
@Override
Vehicle createVehicle() {
return new Car();
}
@Override
Weapon createWeapon() {
return new AK47();
}
}
这里选择的三个食物、武器和交通工具,交通工具是作为一个顶层父类,通过多态来完成选择。