Oop 创建抽象类的多个实例之一

Oop 创建抽象类的多个实例之一,oop,design-patterns,factory,Oop,Design Patterns,Factory,几天以来,我一直在从事一个面向对象的项目,试图采用最佳实践和设计模式。我有这个问题,我想以优雅的方式解决它 我有一个抽象的对象名Node,以及大量扩展该节点的其他类:NodeA、NodeB。。。还有诺德斯。 每个节点都有自己的创建参数;例如,NodeA接受4个字符串参数,nodeb2int,NodeC接受一个List和一个objectdog,依此类推 我教过如何使用工厂,但构造函数中一个节点和另一个节点之间的巨大差异给了我一些问题 你认为这里的好策略是什么?(如果可能,我希望避免反思) 提前感谢

几天以来,我一直在从事一个面向对象的项目,试图采用最佳实践和设计模式。我有这个问题,我想以优雅的方式解决它

我有一个抽象的对象名Node,以及大量扩展该节点的其他类:NodeA、NodeB。。。还有诺德斯。 每个节点都有自己的创建参数;例如,NodeA接受4个字符串参数,nodeb2int,NodeC接受一个List和一个objectdog,依此类推

我教过如何使用工厂,但构造函数中一个节点和另一个节点之间的巨大差异给了我一些问题

你认为这里的好策略是什么?(如果可能,我希望避免反思)

提前感谢您的帮助

已修改以更好地指定我的问题: 我有一个树和一个向树中添加节点的应用程序。 创建这些节点是我的问题

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);
    }

}
类应用程序{
MyTree=新建MyTree();
void FirstWay()
{
NodeA node1=新的NodeA(“1”、“2”、“3”、“4”);
NodeB node2=新的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中。每个节点都具有特定于该节点的特殊属性。节点_摄影机将具有用于设置摄影机的对象和参数。节点_材质将包含材质属性,节点_几何体将包含几何体内容


我想我会买一个工厂模型。这样,当我将来实现场景的xml解析时,我就可以在读取xml时使用现成的功能。

这两种方法都是有效的。正如您在评论中所说,如果存在与节点创建相关的其他活动,例如通知,则工厂非常有用。我建议在项目开始时不要过度思考。花一点时间选择一种似乎不错的方法,如果遇到问题,要做好改变的准备。“倾听代码”,它会告诉您何时更改。

“谁应该负责创建一个对象”:什么对象?我们怎么知道?您应该提供有关应用程序以及树和节点的预期用途的更多详细信息……为什么您的工厂不能生产多种类型的节点
.createNodeA()
.createNodeB()
,等等?如果需要传递工厂或保持影响所有类型节点创建的协调状态,这是有意义的。(也考虑流体接口:<代码>树)、GETROOTE()、追加(NoDE1)、追加(NoDE2)< /代码>,为什么要首先使用工厂?它为您解决了什么问题?To 9000:我更喜欢创建对象的单一入口点。致guillaume31:创建每一个对象,一个指导原则,如果有的话,可以帮助我理解每个项目中谁应该负责创建一个对象。工厂可以创建对象,同时在节点上启动其他辅助功能,比如通知A型节点的订户其中一个节点已经存在。我想理解我觉得你的问题在别的地方。为什么有这么多节点?构造器中的每个参数都有什么用途?虽然我们都应该了解设计模式和“最佳实践”以避免重新发明轮子,但要注意不要因为它们存在就到处使用它们。做最简单的适合你情况的事情。