设计模式:工厂模式,第2部分

originally posted on: henricØdesjava.blog

Happy new year everyone! Hope you’re excited about a new year of coding, learning, and growing 设计模式:工厂模式,第2部分

We last left off on chapter four of Head First Design Patterns: A Brain-Friendly Guide which covers the Factory patterns. In this post we’ll cover the second pattern in the chapter, known as “Abstract Factory Pattern”.

这两个工厂模式都负责封装对象的创建,换句话说,就是封装具体的实现。 工厂方法模式通过使用继承来实现此目的,抽象工厂模式通过使用合成来实现此目的。

让我们继续使用第1部分中的“比萨店”示例。该教科书为我们提供了一个假设的示例,我们想控制将来所有比萨店中使用的配料类型。 重要的是要注意,所有商店都将使用某种类型的面团,酱汁,奶酪和蛤s。 这意味着每种成分会有几种不同类型。 这是可以将它们分组为“配料家族”的对象。

设计模式:工厂模式,第2部分

我们要做的是为每个区域创建一个工厂类。 芝加哥,纽约和加利福尼亚的配料厂。 每个工厂都将实现一个通用的“ PizzaIngredientFactory” java接口。 让我们看一下该解决方案的类图。 为简洁起见,未显示加利福尼亚成分工厂。

设计模式:工厂模式,第2部分

有点混乱,但请仔细查看此类图中的关系。 我们看到的是,每种成分类别(面团,酱汁,奶酪,蛤lam)都有一个接口,然后可以根据具体地区实施相应的实现。 这些实现来自各自的PizzaIngredientFactory。 这是对我们的模式进行正式定义的切入点。

抽象工厂模式:提供一个用于创建相关或依赖对象系列的接口,而无需指定其具体类。

下面是PizzaIngredientFactory接口。

设计模式:工厂模式,第2部分

以下是此接口的NYC和Chicago实现。

设计模式:工厂模式,第2部分

设计模式:工厂模式,第2部分

我们还没有完成。 我们需要对比萨进行更改,以便所有比萨仅使用工厂生产的食材,而不接受任何字符串。 下面是抽象的比萨。 花点时间回顾一下我的第1部分帖子,并注意所做的更改。 为了简洁起见,上面的类图中未显示此抽象的批萨以及所有接口和食材的实现。

设计模式:工厂模式,第2部分

以下是意大利辣香肠比萨饼的外观。 请注意,选择特定类型的生面团,调味酱和奶酪的全部责任是如何由组分工厂决定的。 此类是通用接口,可以在构造函数中传递具体实现。 奶酪,蛤lam和素食比萨看起来与此类似。

设计模式:工厂模式,第2部分

最后,让我们更深入地了解客户对这些披萨的使用情况。 以下是纽约披萨店。

设计模式:工厂模式,第2部分

在这里,我们看到“ NYPizzaIngredientFactory”的构造函数被设置为通用的“ PizzaIngredientFactory”数据成员。 然后将其传递给每个披萨类型构造函数。 BOOM,所有的魔术都在后台发生!

That’s a lot of work and the class diagram can look a little confusing, but that’s what it takes to get an implementation of the Abstract Factory Pattern. If you want to take a look at the complete code base for this example check it out here. Thanks for reading  设计模式:工厂模式,第2部分

from: https://dev.to//henriguy/design-patterns-factory-pattern-part-2-17la