我正在学习设计模式,并尝试理解简单工厂和工厂方法模式之间的区别。首先我想澄清一下,我尝试从Stack Overflow和其他网站阅读了很多相关文章,但这并没有帮助到我。
我编写了一个简单的工厂类,如下所示:
public class SimpleItemFactory {
static Item getItem(String type) {
if(type.equals("Cake")) {
return new Cake();
}else if(type.equals("Chocolate")) {
return new Chocolate();
}else {
return null;
}
}
}
现在我已经将所有对象的创建放在一个地方,所以如果明天发生任何变化[比如构造函数需要一个参数],我们只需要在一个地方进行更改。但是它破坏了开闭原则,因为如果明天我们添加更多项目,我们需要更改getItem()方法的条件。所以我们采用工厂方法模式。
![enter image description here](https://istack.dev59.com/adI68.webp)
public abstract class ItemFactory {
abstract Item getItem();
}
class CakeFactory extends ItemFactory {
@Override
Item getItem() {
return new Cake();
}
}
class ChocolateFactory extends ItemFactory {
@Override
Item getItem() {
return new Chocolate();
}
}
class Client{
public static void main(String[] args) {
Item chocolate = new ChocolateFactory().getItem();
System.out.println(chocolate);
}
}
现在当客户想要添加名为IceCream的新项目时,他们只需要创建名为IceCreamFactory的新工厂,并从中创建IceCream,如下所示:
class IceCreamFactory extends ItemFactory{
@Override
Item getItem() {
return new IceCream();
}
}
class Client{
public static void main(String[] args) {
Item iceCream = new IceCreamFactory().getItem();
System.out.println(iceCream);
}
}
我的理解正确吗?虽然我们满足了开闭原则,但是对于每个产品(Item),我们都需要一个工厂类,这不会变成难以管理的噩梦吗?
注意:我所指的文章是指https://www.codeproject.com/Articles/1135918/Factory-Patterns-Factory-Method-Pattern?msg=5380215#xx5380215xx。