C++ 复合模式:复制树结构

C++ 复合模式:复制树结构,c++,oop,design-patterns,composite,C++,Oop,Design Patterns,Composite,我已经实现了一个基本的复合模式结构,它有三个类: class Component { }; class Leaf : public Component { }; class Composite : public Component { vector<Component> Leaves; }; 根据由不同组件对象组成的给定树结构,我想从抽象方法开始创建相应的图形表示对象: createGraphicRepresentations(Component a_Component);

我已经实现了一个基本的复合模式结构,它有三个类:

class Component
{
};

class Leaf : public Component
{
};

class Composite : public Component
{
vector<Component> Leaves;
};
根据由不同组件对象组成的给定树结构,我想从抽象方法开始创建相应的图形表示对象:

createGraphicRepresentations(Component a_Component);

是否有一种优雅的方法可以根据_组件创建GraphicLeaf或GraphicComposite,同时避免类型检查

您可以将图形组件的创建委托给原始组件:

class Component {

    GraphicComponent create();
}
因此,您可以实现一个树遍历器,然后在每个组件上调用create。这是一种方法。另一种方法是实现一个。使用访问者模式,您的代码将如下所示:

interface IComponentVisitor {

   void visit(Component component);
   void visit(OtherComponent component);
}

class Component {
  void accept(IComponentVisitor visitor) {
     visitor.visit(this);
  }
}
然后,一个具体的访问者实现该访问者并创建相应的组件

class GraphicsVisitor {
  void visit(Component compoennt) {
  }
  void visit(OtherComponent component) {
     graphisComponent.add(new OtherGraphicsComponent());
  }
}

java还是C++?选择一个。注意这里有切片(因为你选择了C++):
向量叶
class GraphicsVisitor {
  void visit(Component compoennt) {
  }
  void visit(OtherComponent component) {
     graphisComponent.add(new OtherGraphicsComponent());
  }
}