add Decorator Pattern
parent
be358a9bd3
commit
c0ab6ab5fe
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
After Width: | Height: | Size: 239 KiB |
|
@ -0,0 +1,93 @@
|
||||||
|
#ifndef __DECORATOR_PATTERN_H__
|
||||||
|
#define __DECORATOR_PATTERN_H__
|
||||||
|
|
||||||
|
//抽象构件
|
||||||
|
class Component
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Component(){}
|
||||||
|
virtual void operation() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
//具体构件类
|
||||||
|
class Phone :public Component
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Phone(){}
|
||||||
|
void operation(){
|
||||||
|
printf("手机\n");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//抽象装饰类
|
||||||
|
class Decorator :public Component
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Decorator(){}
|
||||||
|
Decorator(Component *c){
|
||||||
|
this->component = c;
|
||||||
|
}
|
||||||
|
void operation(){
|
||||||
|
this->component->operation();
|
||||||
|
}
|
||||||
|
Component *getComponent(){
|
||||||
|
return this->component;
|
||||||
|
}
|
||||||
|
void setComponent(Component *c){
|
||||||
|
this->component = c;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
Component *component;
|
||||||
|
};
|
||||||
|
|
||||||
|
//具体装饰类:手机壳
|
||||||
|
class DecoratorShell:public Decorator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DecoratorShell(){}
|
||||||
|
DecoratorShell(Component *c){
|
||||||
|
this->setComponent(c);
|
||||||
|
}
|
||||||
|
void operation(){
|
||||||
|
this->getComponent()->operation();
|
||||||
|
this->newBehavior();
|
||||||
|
}
|
||||||
|
void newBehavior(){
|
||||||
|
printf("装手机壳\n");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//具体装饰类:手机贴纸
|
||||||
|
class DecoratorSticker :public Decorator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DecoratorSticker(){}
|
||||||
|
DecoratorSticker(Component *c){
|
||||||
|
this->setComponent(c);
|
||||||
|
}
|
||||||
|
void operation(){
|
||||||
|
this->getComponent()->operation();
|
||||||
|
this->newBehavior();
|
||||||
|
}
|
||||||
|
void newBehavior(){
|
||||||
|
printf("贴卡通贴纸\n");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//具体装饰类:手机挂绳
|
||||||
|
class DecoratorRope :public Decorator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DecoratorRope(){}
|
||||||
|
DecoratorRope(Component *c){
|
||||||
|
this->setComponent(c);
|
||||||
|
}
|
||||||
|
void operation(){
|
||||||
|
this->getComponent()->operation();
|
||||||
|
this->newBehavior();
|
||||||
|
}
|
||||||
|
void newBehavior(){
|
||||||
|
printf("系手机挂绳\n");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
#endif //__DECORATOR_PATTERN_H__
|
|
@ -0,0 +1,37 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include "DecoratorPattern.h"
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
printf("\nJungle的第一个手机:\n");
|
||||||
|
Component *c;
|
||||||
|
Component *com_Shell;
|
||||||
|
c = new Phone();
|
||||||
|
com_Shell = new DecoratorShell(c);
|
||||||
|
com_Shell->operation();
|
||||||
|
|
||||||
|
printf("\nJungle的第二个手机:\n");
|
||||||
|
Component *c2;
|
||||||
|
Component *com_Shell2;
|
||||||
|
c2 = new Phone();
|
||||||
|
com_Shell2 = new DecoratorShell(c2);
|
||||||
|
Component *com_Sticker;
|
||||||
|
com_Sticker = new DecoratorSticker(com_Shell2);
|
||||||
|
com_Sticker->operation();
|
||||||
|
|
||||||
|
printf("\nJungle的第三个手机:\n");
|
||||||
|
Component *c3;
|
||||||
|
Component *com_Shell3;
|
||||||
|
c3 = new Phone();
|
||||||
|
com_Shell3 = new DecoratorShell(c3);
|
||||||
|
Component *com_Sticker2;
|
||||||
|
com_Sticker2 = new DecoratorSticker(com_Shell3);
|
||||||
|
Component *com_Rope;
|
||||||
|
com_Rope = new DecoratorRope(com_Sticker2);
|
||||||
|
com_Rope->operation();
|
||||||
|
|
||||||
|
printf("\n\n");
|
||||||
|
|
||||||
|
system("pause");
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue