经典设计模式——抽象工厂模式

编程

工厂模式" title="抽象工厂模式">抽象工厂模式用于创建一系列相关或者相互依赖对象,而无需指定具体的类。和工厂模式一样,它包括以下角色:

  • Factory:抽象的工厂,声明工厂方法,该方法返回一个Product类型的对象
  • ConcreteFactory:工厂的实现,重写了工厂方法,并返回ConcreteProduct实例
  • Product:工厂生产出来的抽象产品
  • ConcreteProduct:具体的产品

考虑如下场景:KFC出售2种套餐,一种经济型包含鸡翅和可乐,另一种高档型,包含鸡腿和咖啡。用于只要指出需要的套餐名字就可以获得相应的食品,这种情况下,工厂模式就不再适用了。因为工厂模式每个子工厂只负责生产相互独立的产品,它不适用于一次创建一个“产品套餐”,而抽象工厂模式正是在此方面进行了改进:

//产品族1:KFC食品

abstract class KFCFood {

public abstract void show();

}

class Chicken extends KFCFood {

public void show() {

System.out.println("鸡腿+1");

}

}

class Wings extends KFCFood {

public void show() {

System.out.println("鸡翅+1");

}

}

//产品族2:KFC饮料

abstract class KFCDrink {

public abstract void show();

}

class Cola extends KFCDrink {

public void show() {

System.out.println("可乐+1");

}

}

class Coffee extends KFCDrink {

public void show() {

System.out.println("咖啡+1");

}

}

//抽象工厂,生产套餐

interface IKFCFactory {

KFCFood createFood();

KFCDrink createDrink();

}

//经济型套餐,包括鸡翅和可乐

class CheapPackageFactory implements IKFCFactory {

public KFCFood createFood() {

return new Wings();

}

public KFCDrink createDrink() {

return new Cola();

}

}

//高档型套餐,包括鸡腿和咖啡

class DearPackageFactory implements IKFCFactory {

public KFCFood createFood() {

return new Chicken();

}

public KFCDrink createDrink() {

return new Coffee();

}

}

public class Client {

public static void main(String[] args) {

//经济型套餐

IFactory factory = new CheapPackageFactory();

KFCFood food1 = factory.createFood();

KFCDrink drink1 = factory.createDrink();

food1.show();

drink1.show();

}

}

抽象工厂模式可用于以下情形:

  • 同一个产品族的产品在一起使用,而且它们之间是相互依赖的,不可分离
  • 只希望提供一组对象而不显示它们的实现过程,只显示它们的接口
  • 系统不依赖于某些具体的产品类

以上是 经典设计模式——抽象工厂模式 的全部内容, 来源链接: utcz.com/z/515747.html

回到顶部