我正试图弄清楚Java中工厂类的目的。无论我到哪里,它的目的都是
示例显示了一个界面,例如
public interface Shape {
void draw();
}
使用一些实现此接口的具体类,例如
public class Circle implements Shape {
@Override
public void draw() {
// Draw circle
}
}
和工厂,例如
public class ShapeFactory {
public Shape getShape(String shapeType){
if(shapeType.equalsIgnoreCase("CIRCLE")){
return new Circle();
}
// implement other types of shape
return null;
}
}
工厂的使用类似于:
Shape shape1 = shapeFactory.getShape("CIRCLE");
我的问题是:这比仅使用没有工厂的纯多态性更好,例如:
Shape shape1 = new Circle();
在我看来,这就像工厂一样实现了通用界面。我不太确定“隐藏创建逻辑”的好处是什么,当创建圆的创建逻辑与创建工厂的创建逻辑完全相同时。
答案 0 :(得分:0)
使用工厂的主要好处是它们提供的抽象形式甚至比典型的继承更大。例如:
工厂如何制作该物品?
是否分配了新对象?它是否访问池,以节省资源?使用工厂,可能永远不会使用'new'关键字,从而节省了内存和/或GC开销。工厂可以执行构造函数通常不应执行的操作,例如进行远程执行调用或访问数据库。有时,工厂将返回一个Future实例,这意味着它可以在并行线程中进行实际处理!
工厂来自哪里?
你自己实施了工厂吗?从图书馆导入工厂?它是通过某种形式的IoC注入的吗? http://en.wikipedia.org/wiki/Inversion_of_control
总结,使用工厂是因为它们几乎是生产某种东西的最终抽象形式
答案 1 :(得分:0)
new
"关键字。
假设我建立了一个名为Manager
的类。当我构建它时,它需要String
和int
,因为它所管理的只是一个Person
对象,具有名称和年龄。
但是当我增加我的应用程序时,我最终希望对新类型的数据进行操作,例如向我的人员添加一个职业领域。我希望我的经理能够在其构造函数中使用Enum
以及String
和int
来接收职业。
然后一年后,我的应用程序增长了很多,我有人的子类,数据访问对象,以及我需要传递给我的经理的各种数据。如果我没有使用工厂,那么在我实例化Manager
类的代码中的ANYWHERE,我必须修复构造函数。
如果我使用ManagerFactory
类,使用方法getManager()
我只需要更改工厂类中的构造函数,允许对getManager()
的所有引用仍然返回{ {1}},无需更改。
答案 2 :(得分:0)
抽象工厂设计模式是关于创建对象族,而不是单个对象。例如,GUI应用程序可以使用不同的具体工厂来绘制不同风格的元素。
答案 3 :(得分:0)
当看起来创建圆的创建逻辑与创建工厂的创建逻辑完全相同时。
你在那里抓住了很大一部分困惑。如果创建开始越来越多(参见KeyFactory),它可以简化您的代码和消费者的代码。
答案 4 :(得分:0)
工厂模式是根据提供给它的数据返回几个可能类之一的实例。它是一个"设计模式"。您甚至可以使用" polymorphism"来实现它。这种模式为"类似对象"。
的对象创建过程提供了一个包装器工厂模式可用于 -
有关详细信息,请参阅http://dgmjava.blogspot.in/2011/11/factory-design-pattern.html