前言:工厂方法模式通过抽象工厂类约定了一个创建对象的接口,并由抽象工厂的子类决定实际生产的对象。
栗子
场景描述
一家企业特别热衷于生产事物,就通过抽象类的形式(FoodFactory)约定了将来子孙创建工厂时必须遵循的模式,即每个子工厂都必须生产食物(Food),但是子工厂可以根据自己的喜好来决定生产的具体产品,如BeerFactory比较热衷于啤酒生产, FriedChickenFactory热衷于炸鸡。
程序语言
食物类
//食物类
public class Food {
}
//啤酒类
public class Beer extends Food {
public Beer() {
System.out.println("啤酒");
}
}
//炸鸡类
public class FriedChicken extends Food {
public FriedChicken() {
System.out.println("炸鸡");
}
}
父工厂类
//约定了子孙工厂类都要生产食物(Food)
public abstract class FoodFactory {
public abstract Food produceFood();
}
子工厂类
//炸鸡工厂
public class FriedChickenFactory extends FoodFactory {
@Override
public FriedChicken produceFood() {
return new FriedChicken();
}
}
//啤酒工厂
public class BeerFactory extends FoodFactory {
@Override
public Beer produceFood() {
return new Beer();
}
}
客户端
public class Main {
public static void main(String[] args) {
FoodFactory foodFactory = new BeerFactory();
Food beer = foodFactory.produceFood();
foodFactory = new FriedChickenFactory();
Food chicken = foodFactory.produceFood();
}
}
效果
1、父工厂类约定了子工厂类必须遵守的模型,适合用于生产一类商品,并且每个商品类一般单独使用。如啤酒、炸鸡同属于食物,但是可以拿来单独销售。
2、工厂方法便于扩展,当需要增加新的商品类时,只需要增加对应的工厂类即可。
3、类较多,每增加一个商品,都需要增加一个对应的工厂类。