深圳市网站建设制作设计品牌,网站建设与推广的实训报告,各种类型网站建设口碑好,小程序开发公司哪家好?哪家最好?欢迎来到 破晓的历程的 博客 ⛺️不负时光#xff0c;不负己✈️ 什么是装饰器模式#xff1f;
装饰器模式#xff08;Decorator Pattern#xff09;是一种结构型设计模式#xff0c;允许你向一个现有的对象添加新的功能#xff0c;同时又不改变其结构。这种模式通过创… 欢迎来到 破晓的历程的 博客 ⛺️不负时光不负己✈️ 什么是装饰器模式
装饰器模式Decorator Pattern是一种结构型设计模式允许你向一个现有的对象添加新的功能同时又不改变其结构。这种模式通过创建一个装饰类将对象放入装饰类中然后动态地扩展对象的行为。
如何实现装饰器模式
假设有这样一个需求 有BMWBenzAudi三种不同的品牌这些车都具备定速巡航自定刹车车道偏离功能。但虽然这些车属于不同的品牌但是这些功能实现起来确很相似但是如果我们分别添加不同的功能就需要实现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();}