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

originally posted on: henricØdesjava.blog

Happy new year everyone! Hope you’re excited about a new year of coding, learning, and growing 📈

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。 这意味着每种成分会有几种不同类型。 这是可以将它们分组为“配料家族”的对象。

family of ingredients (1)

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

Factory Pattern

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

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

下面是PizzaIngredientFactory接口。

Screen Shot 2018-01-14 at 10.04.50 AM

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

Screen Shot 2018-01-14 at 10.05.55 AM

Screen Shot 2018-01-14 at 10.07.01 AM

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

Screen Shot 2018-01-14 at 10.08.10 AM

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

Screen Shot 2018-01-14 at 10.09.53 AM

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

Screen Shot 2018-01-14 at 10.12.20 AM

在这里,我们看到“ 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  👋🏽

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值