凡科建站官网登,wordpress 论坛风格,做网站月入100万,网站模版 之星文章目录 概述装饰模式原理代码案例小结 概述
装饰模式(decorator pattern) 的原始定义是#xff1a;动态的给一个对象添加一些额外的职责. 就扩展功能而言,装饰器模式提供了一种比使用子类更加灵活的替代方案。
装饰模式原理
装饰模式中的角色#xff1a;
抽象构件角色 … 文章目录 概述装饰模式原理代码案例小结 概述
装饰模式(decorator pattern) 的原始定义是动态的给一个对象添加一些额外的职责. 就扩展功能而言,装饰器模式提供了一种比使用子类更加灵活的替代方案。
装饰模式原理
装饰模式中的角色
抽象构件角色 它是具体构件和抽象装饰类的共同父类,声明了在具体构件中实现的业务方法.它引进了可以使客户端以一致的方式处理未被装饰的对象以及装饰之后的对象,实现客户端的透明操作具体构件角色 它是抽象构件类的子类,用于定义具体的构建对象,实现了在抽象构建中声明的方法,装饰类可以给它增加额外的职责(方法).抽象装饰角色 它也是抽象构件类的子类,用于给具体构件增加职责,但是具体职责在其子类中实现.它维护了一个指向抽象构件对象的引用,通过该引用可以调用装饰之前构件对象的方法,并通过其子类扩展该方法,以达到装饰的目的.具体装饰角色 : 它是抽象装饰类的子类,负责向构件添加新的职责.每一个具体装饰类都定义了一些新的行为,它可以调用在抽象装饰类中定义的方法,并可以增加新的方法用于扩充对象的行为.
代码案例
抽象构建类
class Context {
public:bool isMgr;// User user;// double groupsale;
};class CalcBonus {
public:CalcBonus(CalcBonus * c nullptr) : cc(c) {}virtual double Calc(Context ctx) {return 0.0; }virtual ~CalcBonus() {}protected:CalcBonus* cc;
};具体装饰角色
class CalcMonthBonus : public CalcBonus {
public:CalcMonthBonus(CalcBonus * c) : CalcBonus(c) {}virtual double Calc(Context ctx) {double mbonus /* 计算流程忽略*/; return mbonus cc-Calc(ctx);}
};下边这个类不一样的可以当做管理者角色的计算方法也就是Context isMgr为true时的计算。
class CalcGroupBonus : public CalcBonus {
public:CalcGroupBonus(CalcBonus * c) : CalcBonus(c) {}virtual double Calc(Context ctx) {double gbnonus /* 计算流程忽略*/; return gbnonus cc-Calc(ctx);}
};小结
装饰模式动态的给一个对象添加一些额外的职责. 就扩展功能而言,装饰器模式提供了一种比使用子类更加灵活的替代方案。在现实中很常见的比如不同部门不同员工工作职责不一样都是在做同一件事就可以使用这种方法。OK翻篇。感兴趣可以来学习学习。