装饰模式学习笔记

一、装饰模式的基本概念

1.装饰模式的动机与意图

装饰模式的主要意图:
动态地给一个对象添加一些额外地职责。就增加功能而言,装饰模式相比生成子类而言更加灵活。

动机:
给某个对象而不是整个类添加一些功能。

适用场景:
1.在不影响其它对象的前提下,以动态、透明的方式给单个对象添加职责。
2.处理那些可以撤销的临时职责。
3.当不能使用生成子类的方法去进行扩充时

2.装饰模式的典型结构图

结构图
Component:
抽象基类,提供统一的对象接口。

ComcreteComponent:
Component类的具体实现类。

Decorator:
装饰器抽象类,其定义了与Component接口一致的接口,并有一个指向Component对象的指针。

ConcrteDecorator:
具体装饰器类,可以给继承了Component类的对象动态地添加职责。

3.装饰模式的优缺点

主要优点:
1.比继承更加灵活
2.避免在层次结构高层的类有太多特征

主要缺点:
1.Decorator与它的Component不一样
2.会生成许多小对象

二、C++代码实例

1.C++代码

代码如下(示例):

#include <iostream>
using namespace std;

class Component{
public:
  virtual void Operation(void) = 0;  
};


class ConcreteComponent : public Component{
public:
  void Operation(void){
    cout << "ConcreteComponent operation" << endl;    
  };
};


class Decorator : public Component{
protected:
Component * target;/*被装饰的目标*/
public:
 void Operation(void){
   target->Operation();    
 };
 
};


class ConcreteDecorator : public Decorator{
 
public:
 ConcreteDecorator(Component * target_in){
     this->target = target_in;
 };
 
 /*新增的职责(功能)*/
 void AddedBehavior(void){
     cout << "AddedBehavior" << endl;    
 };
 
 /*重新定义的Operation函数*/
 void Operation(void){
  /*下面例子为:调用Component的Operation与新增行为*/
  /*这里的逻辑可以根据实际需求而定*/
  Decorator::Operation();
  AddedBehavior();   
 };
};


int main() {
    /*使用示例*/
	Component * c1 = new ConcreteComponent();//创建ConcreteComponent对象
	Decorator * d1 = new ConcreteDecorator(c1);//使用ConcreteDecorator对象装饰c1对象
	
	d1->Operation();
	return 0;
}

2.代码运行结果

代码运行结果:
2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值