DECORATOR 장식자 패턴
-객체에 동적으로 새로운 기능을 추가 한다.
-다른 객체에 영향을 주지 않고 새로운 기능 추가 가능.
class Component{
public:
virtual void operation() = 0;
};
class ConcreteComponet : public Component{
public:
void operation() { cout << "ConcreteComponet" << endl; }
};
class Decorator : public Component{
public:
Decorator(Component* a) : _Componet(a) {}
~Decorator() { if(_Componet) delete _Componet; }
void operation() { if(_Componet) _Componet->operation(); }
private:
Component* _Componet;
};
class ConcreteDecorator : public Decorator{
public:
ConcreteDecorator(Component* b) : Decorator(b) {}
void operation() { Decorator::operation(); cout << "ConcreteDecorator" <<endl; }
};
int main(){
Component* _Component = new ConcreteDecorator(new ConcreteDecorator(new ConcreteComponet));
_Component ->operation();
delete _Component ;
return 0;
}
class Component{
public:
virtual int Cost() = 0;
virtual void Order() = 0;
};
class ConcreteComponet : public Component{
public:
int Cost() { return 6000; }
void Order() { cout << "부대찌개" << endl; }
};
class Decorator : public Component{
public:
Decorator(Component* a) : _Componet(a) {}
~Decorator() { if(_Componet) delete _Componet; }
int Cost() {if(_Componet) return _Componet->Cost(); else 0;}
void Order() { if(_Componet) _Componet->Order(); }
private:
Component* _Componet;
};
class ConcreteDecoratorA : public Decorator{
public:
ConcreteDecoratorA(Component* b) : Decorator(b) {}
int Cost() { return Decorator::Cost() + 1000;}
void Order() { Decorator::Order(); cout << "라면사리 추가" <<endl; }
};
class ConcreteDecoratorB : public Decorator{
public:
ConcreteDecoratorB(Component* b) : Decorator(b) {}
int Cost() { return Decorator::Cost() + 2000;}
void Order() { Decorator::Order(); cout << "떡사리 추가" <<endl; }
};
int main(){
Component* pComponent = new ConcreteDecoratorA(new ConcreteDecoratorB(new ConcreteComponet));
pComponent->Order();
cout<<"비용 : "<<pComponent->Cost()<<endl;
delete pComponent;
return 0;
}
'Study > Design Patterns c++' 카테고리의 다른 글
Design Patterns PROXY 프록시 패턴 C++ (0) | 2018.07.02 |
---|---|
Design Patterns FLYWEIGHT 플라이급 패턴 패턴 C++ (0) | 2018.07.02 |
Design Patterns FACADE 퍼사드 패턴 C++ (0) | 2018.06.19 |
Design Patterns STRATEGY 전략 패턴 C++ (0) | 2018.06.18 |
Design Patterns TEMPLATE METHOD 템플릿 메소드 패턴 C++ (0) | 2018.06.18 |