【发布时间】:2015-10-01 14:52:17
【问题描述】:
我正在尝试学习创造设计模式,我想我现在了解工厂方法模式。 但是在转向抽象工厂模式时,我找不到它的用途。我知道我错过了一些东西,但不知道在哪里。
在抽象工厂模式中,我们将有一个抽象工厂,而具体工厂将返回实例。假设我们正在处理 Cars 的创建。我们将拥有一个像
这样的抽象工厂public interface CarFactory{
public Car getCar();
}
我们的具体工厂将类似于
public class AudiFactory{
public Car getCar(){
return new Audi();
}
}
public class VolvoFactory{
public Car getCar(){
return new Volvo();
}
}
在用户类中我们会像这样使用它
CarFactory factory = new AudiFactory();
Car carAudi = factory.getCar();
factory = new VolvoFactory();
Car carVolvo = factory.getCar();
我认为我们也可以使用工厂模式构建相同的功能
public class CarFactory{
public Car getCar(String make){
if("Audi".equals(make))
return new Audi();
else if("Volvo".equals(make))
return new Volvo();
}
}
在用户类中我们可以
CarFactory factory = new CarFactory();
Car carAudi = factory.getCar("Audi");
Car carVolvo = factory.getCar("Volvo");
如果我的理解是正确的(如果有错误请纠正我),为什么我们需要另一种设计模式呢?
【问题讨论】:
-
你读过GoF的设计模式书吗?
-
它是为了抽象对象的创建,例如一个客户端类期望得到一个
CarFactory给构造函数并用它来创建汽车,客户端类不关心它是什么类型的汽车并且它不应该知道。如果你读过 GoF 的书,可能会再读一遍;p 客户端类不应该自己创建工厂。 -
您可能需要检查this 问题。它有很多来自 JDK 的有用示例。
-
感谢 Lukasz,但我们不能有一个客户端类,其构造函数中的字符串值表示汽车类型(“Audi 或“Volvo”)吗?就像 Factory 实例一样?
标签: java design-patterns abstract-factory