我想通过组合来实现多态行为,而不是多级继承。在下面的示例代码中,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;
}
答案 0 :(得分:1)
根据您在评论中的答案,这是一个经典的装饰模式。
要获得一个红色矩形,请将其包裹起来:
Shape *obj=new RedDecorator(new Rectangle);
obj->draw();
装饰者的draw()
调用Rectangle的draw()
并对其进行扩充(装饰它)。