【发布时间】:2014-03-27 14:07:57
【问题描述】:
几天以来,我一直在从事一个 OOP 项目,我正在尝试采用最佳实践和设计模式。我有这个问题,我想以一种优雅的方式解决它。
我有一个抽象对象名称 Node,以及大量扩展此 Node 的其他类:NodeA、NodeB、...和 NodeZ。
每个节点都有自己的创建参数;例如,NodeA 采用 4 个字符串参数,NodeB 采用 2 个 int,NodeC 采用 List
我教过如何使用工厂,但是构造函数中一个节点和另一个节点之间的巨大差异给我带来了一些问题。
您认为这里有什么好的策略? (如果可能,我想避免反射)
提前感谢您的帮助!
修改以更好地说明我的问题: 我有一个 Tree 和一个将节点添加到树的应用程序。 这些节点的创建是我的问题。
Class Application {
MyTree<Node> tree = new MyTree<Node>();
void FirstWay()
{
NodeA node1 = new NodeA("1","2","3","4");
NodeB node2 = new NodeB(10,20);
root = tree.takeRoot();
node1.setChild(node2);
root.setChild(node1);
}
void SecondWay()
{
NodeA node1= MyFactory.getNode("NodeA","1","2","3","4");
NodeB node2= MyFactory.getNode("NodeB",10,20);
root = tree.takeRoot();
node1.setChild(node2);
root.setChild(node1);
}
}
实际上,我试图了解谁应该负责创建一个对象。你能给我一些指导吗? 谢谢!!!
已编辑:
我正在构建一个 3D 引擎,并且我有一组将进入 SceneTree 的节点。这些节点中的每一个都具有特定于节点的特殊属性。 Node_Camera 将具有设置相机的对象和参数。 Node_Material 将包含材料属性,而 Node_Geometry 将包含几何材料。
我想我会选择工厂模型。这样,将来我将实现场景的 xml 解析时,我将在读取 xml 时使用现成的功能。
【问题讨论】:
-
“谁应该负责创建一个对象”:什么对象?我们怎么知道?您应该提供有关您的应用程序以及树和节点的预期用途的更多详细信息...
-
为什么你的工厂不能生产多种节点?
.createNodeA()、.createNodeB()等?如果您需要传递工厂或保持一些影响所有类型节点创建的协调状态,这是有道理的。 (同时考虑流体接口:tree.getRoot().append(node1).append(node2)) -
另外,为什么首先使用工厂?它为您解决了什么问题?
-
至 9000:我希望有一个用于创建对象的入口点。 To guillaume31:创建每个对象,如果有的话,一个指导方针可以帮助我理解每个项目中应该负责创建一个对象的人。工厂可以创建对象并同时在节点上启动其他辅助功能,例如通知节点类型 A 的订阅者其中一个现在在附近。我想了解
-
我觉得你的问题出在其他地方。为什么你有这么多节点?构造函数中的每个参数有什么用?
标签: oop design-patterns factory