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

2017-09-12  本文已影响5人  PeterHe888

什么是抽象工厂模式

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

抽象工厂模式例子

我们假设有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

抽象工厂模式应用

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

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

这里有俩个概念:

抽象工厂模式到此结束
上一篇 下一篇

猜你喜欢

热点阅读