当前位置: 首页> 文旅> 旅游 > 陕西省工程造价信息网官网_西安推广公司_郑州seo_流量精灵官网

陕西省工程造价信息网官网_西安推广公司_郑州seo_流量精灵官网

时间:2025/9/16 2:08:14来源:https://blog.csdn.net/2301_79181030/article/details/142820590 浏览次数:0次
陕西省工程造价信息网官网_西安推广公司_郑州seo_流量精灵官网

欢迎来到 破晓的历程的 博客

⛺️不负时光,不负己✈️

什么是装饰器模式?

装饰器模式(Decorator Pattern)是一种结构型设计模式,允许你向一个现有的对象添加新的功能,同时又不改变其结构。这种模式通过创建一个装饰类,将对象放入装饰类中,然后动态地扩展对象的行为。

如何实现装饰器模式?

假设有这样一个需求:
有BMW,Benz,Audi三种不同的品牌,这些车都具备定速巡航,自定刹车,车道偏离功能。但虽然这些车属于不同的品牌,但是这些功能实现起来确很相似,但是如果我们分别添加不同的功能,就需要实现9个子类,所以我们可以利用装饰器模式来实现这个需求。
代码如下:


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();}
关键字:陕西省工程造价信息网官网_西安推广公司_郑州seo_流量精灵官网

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: