工厂设计模式之抽象工厂模式

抽象工厂模式是一种创建型设计模式,提供了一种创建对象的最佳方式。它定义了一个创建相关或依赖对象的接口,而无需指定具体类。通过创建工厂簇,将简单工厂模式抽象为两层,增强了代码的可维护性和扩展性。文章通过代码示例展示了如何实现抽象工厂模式,以及解释了产品族和等级结构的概念。
摘要由CSDN通过智能技术生成
  1. 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

  1. 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

  1. 抽象工厂模式义了一个interface用于创建相关或有依赖关系的对象族,而无需指明具体的类

  1. 抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合

3 . 从设计层面看,抽象工厂模式就是对简答工厂模式的进一步抽象改进

4 . 将工厂抽象为两层,AbsFactory(抽象工厂)和具体实现的工厂子类,程序员可以根据创建对象类型使用对应的工厂子

类,这样将单个的简单工厂变成了工厂簇,更利于代码的维护和扩展

5 . 代码实现

public interface AbsFactory {
public Pizza createPizza(String orderType);
}
public class BjFactory implements AbsFactory{

@Override
public Pizza createPizza(String orderType) {
   System.out.println("使用抽象工厂模式");
   Pizza pizza=null;
   if(orderType.equals("cheese")) {
        pizza = new BjCheesePizza();
   }else if(orderType.equals("pepper")) {
        pizza = new BjPepperPizza();
   }
   return pizza;
}

}
public class LdFactory implements AbsFactory{

@Override
public Pizza createPizza(String orderType) {
   System.out.println("使用抽象工厂模式");
   Pizza pizza=null;
   if(orderType.equals("cheese")) {
       pizza = new LdCheesePizza();
   }else if(orderType.equals("pepper")) {
       pizza = new LdPepperPizza();
   }
   return pizza;
}

}
public class PizzaOrder {
AbsFactory factory;
public PizzaOrder(AbsFactory absFactory) {
   setFactory(absFactory);
}

private void setFactory(AbsFactory absFactory) {
    Pizza pizza=null;
    String orderType="";
    this.factory=absFactory;
    do {
        orderType=getType();
        pizza = factory.createPizza(orderType);
        if(pizza!=null) {
            pizza.prepare();
            pizza.bake();
            pizza.cut();
            pizza.box();
         }else {
            System.out.println("订购失败");
            break;
          }
      }while(true);
}

private String getType() {
    try {
         BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
         System.out.println("input pizza type:");
         String str = strin.readLine();
         return str;

    } catch (IOException e) {
         e.printStackTrace();
         return "";
    }
}
}
public class PizzaStore {

public static void main(String[] args) {
     new PizzaOrder(new LdFactory());
}

}
  1. 产品族和等级结构

为了更清晰地理解抽象工厂模式,需要先引入两个概念:

产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机、海信电视机、TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌的电视机是其子类。

产品族 :在抽象工厂模式中,产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品,如海尔电器工厂生产的海尔电视机、海尔电冰箱,海尔电视机位于电视机产品等级结构中,海尔电冰箱位于电冰箱产品等级结构中。

从上边的图中我们可以更清晰的看到同族产品和同一等级结构的产品的联系和区别。海尔电视机和长虹电视机都是电视机的子类,这样的关系叫做同一等级结构;海尔电视机和海尔电冰箱都是海尔公司生产的产品,所以他们都是同族产品。

我们还可以通过下边的相图可以更加清楚的看出来,横轴表示等级结构,向横轴做垂线,在同一条垂线上的是同一个等级结构,纵轴便是产品组,向纵轴做垂线,同一条垂线上的是一个产品族。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuxuezhe_987

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值