【问题标题】:Creation of one of many instances of abstract class创建抽象类的许多实例之一
【发布时间】:2014-03-27 14:07:57
【问题描述】:

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

我有一个抽象对象名称 Node,以及大量扩展此 Node 的其他类:NodeA、NodeB、...和 ​​NodeZ。 每个节点都有自己的创建参数;例如,NodeA 采用 4 个字符串参数,NodeB 采用 2 个 int,NodeC 采用 List 和一个对象 Dog 等等。

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

您认为这里有什么好的策略? (如果可能,我想避免反射)

提前感谢您的帮助!

修改以更好地说明我的问题: 我有一个 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


【解决方案1】:

这两种方法都有效。正如您在评论中所说,如果存在与创建节点相关的其他活动(例如通知),则工厂很有用。我建议在项目开始时不要过度思考。花一点时间挑选看起来不错的方法,并准备好在遇到问题时进行更改。 “听代码”,它会告诉你什么时候改变。

【讨论】:

  • 虽然我们都应该了解设计模式和“最佳实践”以避免重新发明轮子,但请注意不要因为它们存在就到处使用它们。做最适合你情况的最简单的事情。
猜你喜欢
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多