复合模式:复制树结构

Composite pattern: Copy tree structure

本文关键字:结构 复制 模式 复合      更新时间:2023-10-16

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

class Component
{
};
class Leaf : public Component
{
};
class Composite : public Component
{
vector<Component> Leaves;
};

此外,我有另一个类ComponentCollection作为组件的容器。这些类都有一个相应的类,负责创建图形表示:

class GraphicComponent;
class GraphicLeaf;
class GraphicComposite; 
class GraphicComponentCollection;

从给定的由不同组件对象组成的树状结构中,我想从一个抽象方法开始创建相应的图形表示对象:

createGraphicRepresentations(Component a_Component);

是否有一种优雅的方式来创建GraphicLeaf或GraphicComposite依赖于a_Component,同时避免类型检查?

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

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