HeadFirst设计模式-工厂模式(4)-抽象工厂

接上文。

确保原料的一致

你打算建造一家生产原料的工厂,并将原料运送到各家加盟店。但是加盟店在不同的区域,酱料是不一样的。你需要准备不同的原料。考虑到未来的扩展,你需要各个地区的原料。

建造原料工厂

现在,我们要建造一个工厂来生产原料。这个工厂将负责创建原料家族中的每一种原料。

开始先为工厂定义个接口,这个接口负责创建所有的原料:

public interface PizzaIngredientFactory {
    // 接口中,每个原料都有一个对应的方法创建该原料
    // 这里有许多新类,每个原料都是一个类
    public Dough createDough();
    public Sauce createSauce();
    public Cheese createCheese();
    public Veggies[] createVeggies();
    public Pepperoni createPepperoni();
    public Clams createClam();
}

要做的事情

1、为每一个区域建造一个工厂。你需要创建一个继承自PizzaIngredientFactory的子类来实现每一个创建方法。

2、实现一组原料类供工厂使用。这些类可以在核实的区域间共享。

3、然后你仍然需要将这一切组织起来,将新的原料工厂整合进旧的PizzaStore代码中。

创建纽约原料工厂

具体创建纽约原料工厂的实现。这工厂专精于大蒜番茄酱料、Reggiano干酪、新鲜蛤蜊…

public class NYPizzaIngredientFactory implements PizzaIngredientFactory {
    // 对于原料家族内的每一种原料,我们都提供了纽约的版本。
    public Dough createDough() {
        return new ThinCrustDough();
    }
    
    public Sauce createSauce() {
        return new MarinaraSauce();
    }
    
    public Cheese CreateCheese() {
        return new ReggianoCheese();
    }
    
    public Veggies[] createVeggies() {
        Veggies veggies[] = { new Garlic(), new Onion(), new Mushroom(), new RedPepper() };
        return veggies;
    }
    
    public Pepperoni createPepperoni() {
        return new SlicedPepperoni();
    }
    // 纽约靠海,所以有新鲜的蛤蜊。芝加哥就必须使用冷冻的蛤蜊。
    public Clams createClam() {
        return new FreshClams();
    }
    
}

重做披萨

工厂一切就绪,准备生产高质量的原料了。现在我们只需要重做比萨,好让它们只适用工厂生产出来的原料。

我们先从抽象的Pizza类开始,把原本的prepare()方法声明成抽象。在这个方法中,我们需要收集比萨所需的原料,而这些原料当然是来自原料工厂了。

abstract void prepare();

未完待续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值