几天后,我正在开展一个OOP项目,我正在努力采用最佳实践和设计模式。我有这个问题,我想以优雅的方式解决它。
我有一个抽象对象名称Node,以及扩展此Node的大量其他类:NodeA,NodeB,...和NodeZ。 每个节点都有自己的创建参数;例如,NodeA采用4个字符串参数,NodeB 2 int,NodeC采用List<双>和一个对象狗等等。
我教过使用工厂< Node>,但是构造函数中一个Node和另一个Node之间的这种巨大差异给了我一些问题。
您认为这里的策略是什么? (如果可能,我想避免反思)
提前感谢您的帮助!
修改以更好地指定我的问题: 我有一棵树<节点>和一个向树添加节点的应用程序。 这些节点的创建是我的问题。
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时使用现成的功能。
答案 0 :(得分:1)
两种方法都有效。正如您在评论中所说,如果存在与创建节点相关的其他活动(例如,通知),则工厂非常有用。我建议不要在项目开始时过度思考。花一点时间选择看起来很好的方法,并准备好在遇到问题时改变。 “听取代码”,它会告诉你何时改变。