头第一设计模式将简单工厂描述为

public class SimplePizzaFactory {
public Pizza createPizza(String type) {
Pizza pizza = null;
if (type.equals(“cheese”)) {
pizza = new CheesePizza();
} else if (type.equals(“pepperoni”)) {
pizza = new PepperoniPizza();
} else if (type.equals(“clam”)) {
pizza = new ClamPizza();
} else if (type.equals(“veggie”)) {
pizza = new VeggiePizza();
}
return pizza;
}
}与工厂方法模式和抽象工厂模式相比,简单工厂模式的缺点是什么?
在Gamma等人的“设计模式”( Design )中,工厂方法模式中的类参数化工厂方法似乎与简单工厂相似。参数化抽象工厂完全是简单工厂,这是正确的吗?设计模式提到了参数化抽象工厂吗?
发布于 2019-06-12 20:52:05
与工厂方法模式和抽象工厂模式相比,简单工厂模式的缺点是什么?
将工厂方法模式与抽象工厂模式进行比较并不完全正确,因为它们服务于不同的目的。工厂方法只是创建一个对象,而抽象工厂模式定义了一个接口,您可以通过这个接口创建一系列对象。如果我没记错的话,你正在读的书中都有描述。
回到简单工厂与工厂方法的缺点:当谈论设计模式时,总是一个问题,以及如何将它们应用于您的特定问题,这取决于每个案例。
要创建的每个对象类型都有一个工厂类,这会增加代码的复杂性,而且每个对象家族都会在附近有一个工厂类,因此很快代码就会与factory类一起爆炸。这是我所知道的唯一的缺点,如果使用正确的模式。当然,另一方面,工厂方法也有其缺点。在选择两者之间时,我总是问自己谁是代码的客户端,以及他更容易使用的是什么。
在Gamma等人的“设计模式”( Design )中,工厂方法模式中的类参数化工厂方法似乎与简单工厂相似。参数化抽象工厂完全是简单工厂,这是正确的吗?设计模式提到了参数化抽象工厂吗?
不完全是这样,但是AbstractFactory的具体工厂实现看起来确实像简单的工厂。
我建议你也看其他文章,我个人的喜好是佐兰的文章和抽象工厂的讲座。参见这里的示例:http://codinghelmet.com/articles/cascading-abstract-factories
发布于 2021-04-03 19:32:53
simple是一个类的工厂类,该类具有一个创建方法,其中有一个大的条件,即基于方法参数选择要实例化的产品类(simple不是设计模式)。
简单工厂的例子:
class UserFactory {
public static function create($type) {
switch ($type) {
case 'user': return new User();
case 'customer': return new Customer();
case 'admin': return new Admin();
default:
throw new Exception('Wrong user type passed.');
}
}}
https://stackoverflow.com/questions/56568317
复制相似问题