⛺️不负时光,不负己✈️
什么是装饰器模式?
装饰器模式
(Decorator Pattern)是一种结构型设计模式,允许你向一个现有的对象添加新的功能,同时又不改变其结构。这种模式通过创建一个装饰类,将对象放入装饰类中,然后动态地扩展对象的行为。
如何实现装饰器模式?
假设有这样一个需求:
有BMW,Benz,Audi三种不同的品牌,这些车都具备定速巡航,自定刹车,车道偏离功能。但虽然这些车属于不同的品牌,但是这些功能实现起来确很相似,但是如果我们分别添加不同的功能,就需要实现9个子类,所以我们可以利用装饰器模式来实现这个需求。
代码如下:
cpp
class Car
{
public:
virtual void show() = 0;
};
class Audi:public Car
{
public:
void show()
{
cout << "这是一辆奥迪,配置:基本配置";
}
};
class Benz:public Car
{
public:
void show()
{
cout << "这是一辆奔驰,配置:基本配置";
}
};
class BMW:public Car
{
public:
void show()
{
cout << "这是一辆奥迪,配置:基本配置";
}
};
//以下几个类都是属于装饰器
class ConcreteDecorator1:public Car
{
public:
ConcreteDecorator1(Car *p)
:_p(p)
{}
void show()
{
_p->show();
cout << ",定速巡航" << endl;
}
private:
Car* _p;
};
class ConcreteDecorator2:public Car
{
public:
ConcreteDecorator2(Car *p)
:_p(p)
{}
void show()
{
_p->show();
cout << ",车道偏离" << endl;
}
private:
Car* _p;
};
class ConcreteDecorator3:public Car
{
public:
ConcreteDecorator3(Car *p)
:_p(p)
{}
void show()
{
_p->show();
cout << ",自动刹车" << endl;
}
private:
Car* _p;
};
int main()
{
Car* B1 = new ConcreteDecorator1(new Benz());
B1->show();
Car* B2 = new ConcreteDecorator2(new Benz());
B2->show();
Car* B3 = new ConcreteDecorator3(new Benz());
B3->show();
}