复合模式:复制树结构

时间:2014-07-21 07:58:56

标签: c++ oop design-patterns composite

我实现了一个具有三个类的基本复合模式结构:

class Component
{
};

class Leaf : public Component
{
};

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

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

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

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

createGraphicRepresentations(Component a_Component);

是否有一种优雅的方法可以创建GraphicLeaf或GraphicComposite,具体取决于a_Component,同时避免类型检查?

1 个答案:

答案 0 :(得分:1)

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

class Component {

    GraphicComponent create();
}

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

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