美文网首页
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设计模式之抽象工厂模式

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