美文网首页
Java设计模式之抽象工厂模式

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

作者: PeterHe888 | 来源:发表于2017-09-12 20:05 被阅读5次

什么是抽象工厂模式

抽象工厂模式提供了 一种模式,可以将一组具有同一主题的单独的工厂封装起来。抽象工厂是一个父类工厂,可以创建其他工厂。所以我们可以叫它"工厂的工厂"。

抽象工厂模式例子

我们假设有A,B俩个厨房。每个厨房拥有的餐具和 食品都不一样,比如刀子和苹果,杯子和牛奶。

Class: Foodaholic  -> void eat(KitchenFactory)
Interface: Food -> String getFoodName() 
Interface: TableWare -> String getToolName()
Class: Apple -> String getFoodName()
Class: Milk -> String getFoodName()
Class: Knife -> String getToolName()
Class: Cup -> String getToolName()
Interface: KitchenFactory -> Food getFood(), Tableware getTableware()
Class: AKitchen: -> Food getFood(), Tableware getTableware()
Class: BKitchen -> Food getFood(), Tableware getTableware()

示例代码

public class Foodaholic {
    public void eat(KitchenFactory kf) {
        System.out.println("A foodaholic is eating " + kf.getFood().getFoodName()
                + " with " + kf.getTableware().getToolName());
    }
    
    public static void main(String[] agrs) {
        Foodaholic f = new Foodaholic();
        KitchenFactory kf = new AKitchen();
        f.eat(kf);
    }

}

interface Food {
    public String getFoodName();
}

interface Tableware {
    public String getToolName();
}

interface KitchenFactory {
    public Food getFood();
    
    public Tableware getTableware();
}
class Apple implements Food {

    @Override
    public String getFoodName() {
        return "apple";
    }
}

class Knife implements Tableware {

    @Override
    public String getToolName() {
        return "knife";
    }
}

class AKitchen implements KitchenFactory {

    @Override
    public Food getFood() {
        return new Apple();
    }

    @Override
    public Tableware getTableware() {
        return new Knife();
    }   
}

运行结果:

抽象工厂模式.png

抽象工厂模式应用

产品分为几个系列,产品的布局都是类似的,在一个系列中某个位置的产品,在另一个系列中一定有一个对应的产品。存在这样的产品结构, 这几个系列中同一位置的产品可能是互斥的,它们是针对不同客户的解决方案,每个客户都选其一。

工厂模式和抽象工厂模式区别

这里有俩个概念:

  • 产品等级结构:比如一个抽象类是食物,其子类有苹果,牛奶等,那么抽象食物与具体食物名称构成了一个产品等级结构。 食物抽象的父类,具体的食物名称是其子类。
  • 产品族:产品族是指由同一个工厂生产的,位于不同产品等级结构中的一组产品。如AKitchen生产的苹果,刀子, 苹果属于食物产品等级结构中,而刀子属于餐具产品等级结构中。
    结论
    工厂方法模式:针对的是一个产品等级结构
    抽象工厂模式:针对的是多个产品等级结构
抽象工厂模式到此结束

相关文章

  • 代码段简单学习设计模式 -- 抽象工厂模式

    《JAVA与模式》之抽象工厂模式 大话设计模式 抽象工厂模式(Abstraci Factory): 提供一个创...

  • Java与模式

    《JAVA与模式》之简单工厂模式《JAVA与模式》之工厂方法模式《JAVA与模式》之抽象工厂模式

  • Java设计模式教程

    Java设计模式教程 Java工厂设计模式 Java抽象工厂模式 Java单例模式 Java建造者(Builder...

  • 设计模式系列-抽象工厂模式

    JAVA设计模式系列: 单例模式 观察者模式 模板方法模式 简单工厂模式 抽象工厂模式 抽象工厂模式 定义 抽象工...

  • java设计模式

    一、《JAVA与模式》之工厂方法模式 二、《JAVA与模式》之抽象工厂模式 三、《JAVA与模式》之单例模式 四、...

  • 设计模式系列

    创建型模式: 设计模式之工厂模式(Factory Pattern)设计模式之抽象工厂模式(Abstract Fac...

  • iOS设计模式(三)之抽象工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(一)之简单工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式(二)之工厂模式

    设计模式系列传送门 iOS设计模式(一)之简单工厂模式iOS设计模式(二)之工厂模式iOS设计模式(三)之抽象工厂...

  • iOS设计模式之美-适配器模式

    iOS设计模式之美-工厂模式iOS设计模式之美-抽象工厂模式iOS设计模式之美-生成器模式iOS设计模式之美-适配...

网友评论

      本文标题:Java设计模式之抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/fbchsxtx.html