在没有多级继承的情况下通过c ++中的组合进行多态行为

时间:2015-01-24 08:40:51

标签: c++ design-patterns polymorphism virtual composition

我想通过组合来实现多态行为,而不是多级继承。在下面的示例代码中,bluerectangle是从矩形派生的,而bluecircle是从circle派生的。所以问题是我可能在继承层次结构中具有相同的深度,因此工作是使用组合而不是多级继承来降低层次结构级别。我们可以使用组合来实现此处的多态行为,如果是,则需要在此处遵循设计。目前我刚刚开始阅读设计模式,因此它似乎与桥模式相似,但如果没有适当的指针则无法继续进行。

 #include<iostream>
    using namespace std;
    class shape
    {
    public:
    virtual void draw()=0;
    virtual ~shape(){}
    };

    class rectangle: public shape
    {
    public:
    void draw()
    {
    cout<<"draw rectangle"<<endl;
    }
    }; 
    class bluerectangle : public rectangle
    {
    public:
    void draw()
    {
    cout<<"draw bluerectangle"<<endl;
    }
    };
    class circle: public shape
    {
    public:
    void draw()
    {
    cout<<"draw circle"<<endl;
    }

    }; 

    class bluecircle : public circle
    {
    public:
    void draw()
    {
    cout<<"draw bluecircle"<<endl;
    }
    };

    int main()
    {
    shape *obj=new circle;
    obj->draw();
    obj=new rectangle;
    obj->draw();
    obj=new bluerectangle;
    obj->draw();
    obj=new bluecircle;
    obj->draw();
    delete obj;
    return 1;
    }

1 个答案:

答案 0 :(得分:1)

根据您在评论中的答案,这是一个经典的装饰模式。

Decorator applied to OP's problem

要获得一个红色矩形,请将其包裹起来:

Shape *obj=new RedDecorator(new Rectangle);
obj->draw();

装饰者的draw()调用Rectangle的draw()并对其进行扩充(装饰它)。