我实现了一个具有三个类的基本复合模式结构:
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,同时避免类型检查?
答案 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());
}
}