装饰模式(Decorator)
来源:互联网 发布:文言文虚词乎 编辑:程序博客网 时间:2024/04/30 23:55
意图
动态的给一个对象添加一些额外的职责。
Decorator模式添加功能比生成子类更为灵活。
Head First设计模式
类图
参与者
- Component
定义一个对象接口,可以给这些对象动态地添加职责 - ConcreteComponent
定义一个对象,可以个这个对象添加一些职责 - Decorator
维持一个指向Component对象的指针,并定义一个与Component的接口一致的接口 - ConcreteDecorator
向组件添加职责
代码
#include <iostream>
#include <string>
using namespace std;
class Component
{
public:
virtual void Operation() = 0;
};
class ConcreteComponent:public Component
{
public:
void Operation()
{
cout<<"具体对象的操作 ConcreteOp"<<endl;
}
};
class Decorator:public Component
{
protected:
Component *pComp;
public:
void SetComponent(Component *pComp)
{
this->pComp = pComp;
}
void Operation()
{
if(pComp != NULL)
{
pComp->Operation();
}
}
};
class ConcreteComponentA:public Decorator
{
private:
string addState; //添加的新状态
public:
ConcreteComponentA(string state)
{
this->addState = state;
}
void Operation()
{
Decorator::Operation();//调用父类方法
cout<<"A 装饰类: "<<endl;
cout<<"添加了的新状态: "<<this->addState<<endl;
}
};
class ConcreteComponentB:public Decorator
{
private:
string addState; //添加的新状态
void AddedOperation()
{
cout<<"添加了的新职责BFun"<<endl;
}
public:
void Operation()
{
Decorator::Operation();//调用父类方法
cout<<"B 装饰类:"<<endl;
AddedOperation();
}
};
int main()
{
ConcreteComponent *pConComp = new ConcreteComponent();
ConcreteComponentA *pConCompA = new ConcreteComponentA("Astate");
ConcreteComponentB *pConCompB = new ConcreteComponentB();
pConCompA->SetComponent(pConComp);
pConCompB->SetComponent(pConCompA);
pConCompB->Operation();
}
#include <string>
using namespace std;
class Component
{
public:
virtual void Operation() = 0;
};
class ConcreteComponent:public Component
{
public:
void Operation()
{
cout<<"具体对象的操作 ConcreteOp"<<endl;
}
};
class Decorator:public Component
{
protected:
Component *pComp;
public:
void SetComponent(Component *pComp)
{
this->pComp = pComp;
}
void Operation()
{
if(pComp != NULL)
{
pComp->Operation();
}
}
};
class ConcreteComponentA:public Decorator
{
private:
string addState; //添加的新状态
public:
ConcreteComponentA(string state)
{
this->addState = state;
}
void Operation()
{
Decorator::Operation();//调用父类方法
cout<<"A 装饰类: "<<endl;
cout<<"添加了的新状态: "<<this->addState<<endl;
}
};
class ConcreteComponentB:public Decorator
{
private:
string addState; //添加的新状态
void AddedOperation()
{
cout<<"添加了的新职责BFun"<<endl;
}
public:
void Operation()
{
Decorator::Operation();//调用父类方法
cout<<"B 装饰类:"<<endl;
AddedOperation();
}
};
int main()
{
ConcreteComponent *pConComp = new ConcreteComponent();
ConcreteComponentA *pConCompA = new ConcreteComponentA("Astate");
ConcreteComponentB *pConCompB = new ConcreteComponentB();
pConCompA->SetComponent(pConComp);
pConCompB->SetComponent(pConCompA);
pConCompB->Operation();
}
Head First设计模式
- 运行时扩展,远比编译时期的继承威力大
- 装饰模式可以使你在不修改任何底层代码的情况下,给你的(或别人的)对象赋予新的职责
- 装饰模式Decorator Pattern
- 装饰(Decorator)模式
- 装饰模式(Decorator Pattern)
- 装饰(Decorator)模式
- 装饰模式:Decorator
- 装饰模式(Decorator)
- 装饰模式(Decorator Pattern)
- 装饰模式Decorator
- Decorator 装饰者模式
- 装饰模式(Decorator)
- 装饰模式(Decorator)
- DECORATOR (装饰)模式
- Decorator装饰模式
- 装饰器(Decorator)模式
- 装饰模式(Decorator)
- Decorator(装饰)模式
- 装饰者模式(Decorator)
- 装饰模式Decorator
- 优化SQLServer索引的小技巧
- 中断和定时器不允许睡眠: BUG: scheduling while atomic: swapper/0/0x00000100
- GIT & REPO & GERRIT (二)
- H.265之三 -帧内预测(2)
- 我的淘宝店:亲亲台宝 简介
- 装饰模式(Decorator)
- Extjs 4.2 中 Ext.MessageBox.msgButtons[0].setText()方法没有效果
- 快速简单理解i2c标准协议
- GIT & REPO & GERRIT (三)
- dg创建stdby报错NMO not setuid-root (Unix-only)
- Servlet and JSP development with Eclipse
- speex 编解码 demo
- GIT & REPO & GERRIT (四)
- hive 优化遇到的一个问题:hive.auto.convert.join