gpt4 book ai didi

factory - Smalltalk 相当于工厂方法?

转载 作者:行者123 更新时间:2023-12-04 22:37:34 29 4
gpt4 key购买 nike

工厂方法是否在 Smalltalk 中使用,如果是,应该如何编写一个,而不是在 Java 中,例如?
谢谢。

最佳答案

在工厂模式中,我们在不命名的情况下实例化了一些子类。考虑比萨工厂和层次结构:

Pizza
PepperoniPizza
CheesePizza
...

我们想在不知道它的类名的情况下实例化一个披萨子类。例如:
  pizza := Pizza flavor: 'cheese' size: 12 inches

回答比萨饼的正确子类,填充它的大小。

现在在 Java 或 C++ 中,人们可能会做一个大的“switch”语句来比较不同的字符串名称。每次我们添加 Pizza 的新子类时,我们都需要记住添加到主 switch 语句中。见 Wikipedia article对于典型的例子。

在 Smalltalk 中不是这样,其中类是第一类对象,因此我们可以向下迭代类层次结构,要求每个子类匹配。例如:
Pizza class>>flavor: aString size: anInteger
matchingClass := self subclasses detect: [:first | first matching: aString].
^matchingClass new size: anInteger.

每当我们实现一个新的披萨子类时,我们都会实现一个方法来进行工厂匹配:
CheesePizza class>>matching: aString
^aString = 'cheese'
PepperoniPizza class>>matching: aString
^aString = 'pepperoni'

无需维护中央 switch 语句。只是对象!

关于factory - Smalltalk 相当于工厂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3121102/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com