C++디자인 모드 의 장식 모드(Decorator)

장식 모델 은 전형 적 인 기능 확장 모델 로 그 정 수 는 장식 류 에서 계승 과 집적 방식 으로 인터페이스 와 실현 대상 을 얻 은 다음 에 자신 을 통 해 확장 인 터 페 이 스 를 실현 한다.
역할.
장식 모델 은 장식 류 를 통 해 동태 적 으로 책임 을 대상 에 부가 하고 기능 을 확장 하려 면 계승 을 통 해 자 류 를 증가 하지 않 아 도 대상 을 확장 할 수 있 는 새로운 기능 을 제공 하여 계승 보다 더욱 탄력 적 인 대체 방안 을 제공 하여 자 류 의 수량 팽창 으로 인 한 시스템 의 비대 함 을 피 할 수 있다.
클래스 보기

코드 구현

class Component
{
public:
  Component(){}
  virtual ~Component(){}

  virtual void operation() = 0;
};


class ConcreteComponentA : public Component
{
public:
  ConcreteComponentA(){}
  ~ConcreteComponentA(){}

  void operation()
  {
    fprintf(stderr, "ConcreteComponentA's operation!
"); } }; class ConcreteComponentB : public Component { public: ConcreteComponentB(){} ~ConcreteComponentB(){} void operation() { fprintf(stderr, "ConcreteComponentB's operation!
"); } }; class Decorator : public Component { public: Decorator() :mComponent(NULL){} virtual ~Decorator(){} virtual void operation() { if (mComponent) mComponent->operation(); } virtual void setComponent(Component* pComponent) { mComponent = pComponent; } protected: Component* mComponent; }; class ConcreteDecoratorE : public Decorator { public: ConcreteDecoratorE (); virtual ~ConcreteDecoratorE (); virtual void addBehavior() { mComponent->operation(); fprintf(stderr, "ConcreteDecoratorE's addBehavior!
"); } }; class ConcreteDecoratorF : public Decorator { public: ConcreteDecoratorF (); virtual ~ConcreteDecoratorF (); virtual void addBehavior() { operation(); fprintf(stderr, "ConcreteDecoratorF's addBehavior!
"); } }; int main() { ConcreteComponentB *pComponent = new ConcreteComponentB(); ConcreteDecoratorF decorator; decorator.setComponent(pComponent); decorator.addBehavior(); }
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기