一、源代码:
#include<iostream>
#include<memory>
using namespace std;
class Shape
{
public:
virtual void draw() = 0;
virtual ~Shape() = default;
};
class Rectangle:public Shape
{
public:
virtual void draw() override
{
cout<<"Shape:Rectangle"<<endl;
}
};
class Circle:public Shape
{
public:
virtual void draw() override
{
cout<<"Shape:Circle"<<endl;
}
};
class ShapeDecorator:public Shape
{
public:
ShapeDecorator(shared_ptr<Shape> decoratodShape)
{
this->_decoratedShape = decoratodShape;
}
virtual void draw() override
{
_decoratedShape->draw();
}
protected:
shared_ptr<Shape> _decoratedShape;
};
class RedShapeDecorator:public ShapeDecorator
{
public:
RedShapeDecorator(shared_ptr<Shape> decoratedShape):ShapeDecorator(decoratedShape)
{}
virtual void draw() override
{
_decoratedShape->draw();
setRedBorder();
}
private:
void setRedBorder()
{
cout<<"Border Color:Red"<<endl;
}
};
int main()
{
shared_ptr<Shape> circle = make_shared<Circle>();
shared_ptr<Shape> redCircle = make_shared<RedShapeDecorator>(make_shared<Circle>());
shared_ptr<Shape> redRectangle = make_shared<RedShapeDecorator>(make_shared<Rectangle>());
cout<<"Circle with normal border"<<endl;
circle->draw();
cout<<"\nCircle of red border"<<endl;
redCircle->draw();
cout<<"\nRectangle of red border"<<endl;
redRectangle->draw();
}
二、运行结果: