디자인 패턴(Decorator Pattern)

2024. 12. 30. 17:27·내배캠/C++
#include <iostream>
#include <string>

using namespace std;

class Pizza
{
public:
    virtual ~Pizza() {}
    virtual string GetName() const = 0;
    virtual double GetPrice() const = 0;
};

class BasicPizza : public Pizza
{
public:
    string GetName() const override
    {
        return "Basic Pizza";
    }
    double GetPrice() const override
    {
        return 5.0;
    }
};

class PizzaDecorator : public Pizza
{
protected:
    Pizza* pizza;

public:
    PizzaDecorator(Pizza* p) : pizza(p) {}

    virtual ~PizzaDecorator()
    {
        delete pizza;
    }
};

class CheeseDecorator : public PizzaDecorator
{
public:
    CheeseDecorator(Pizza* p) : PizzaDecorator(p) {}
    string GetName() const override
    {
        return pizza->GetName() + " + Cheese";
    }
    double GetPrice() const override
    {
        return pizza->GetPrice() + 1.5;
    }
};

class OliveDecorator : public PizzaDecorator
{
public:
    OliveDecorator(Pizza* p) : PizzaDecorator(p) {}
    string GetName() const override
    {
        return pizza->GetName() + " + Olive";
    }
    double GetPrice() const override
    {
        return pizza->GetPrice() + 0.5;
    }
};

int main() 
{
    Pizza* pizza = new BasicPizza();

    pizza = new CheeseDecorator(pizza);
    pizza = new OliveDecorator(pizza);

    cout << pizza->GetName() << " : " << pizza->GetPrice();


    delete pizza;

    return 0;
}

 

 

  • 객체의 기능을 동적으로 확장하거나 변경할 수 있도록 설계된 구조적 디자인 패턴이다.
  • 새로운 클래스를 정의하지 않고도 객체의 행동을 동적으로 추가하거나 수정할 수 있다.
  • 객체를 기본 객체와 데코레이터 객체로 분리하고, 데코레이터 객체가 기본 객체를 감싸면서 추가적인 기능을 제공한다.
  • 중첩된 데코레이터를 통해 복잡한 동작을 조합할 수 있지만, 과도한 중첩은 코드의 복잡성을 증가시키고 객체의 최종 동작을 추적하는 것이 어려울 수 있다.

'내배캠 > C++' 카테고리의 다른 글

std::regex_replace  (0) 2024.12.31
디자인 패턴(Observer Pattern)  (1) 2024.12.30
디자인 패턴(Singleton Pattern)  (0) 2024.12.30
std::toupper / std::tolower  (0) 2024.12.30
비트 연산자  (0) 2024.12.30
'내배캠/C++' 카테고리의 다른 글
  • std::regex_replace
  • 디자인 패턴(Observer Pattern)
  • 디자인 패턴(Singleton Pattern)
  • std::toupper / std::tolower
동그래님
동그래님
  • 동그래님
    개발자 동그래
    동그래님
  • 전체
    오늘
    어제
    • 분류 전체보기 (210)
      • 공부 (51)
        • Code Cata (50)
      • 내배캠 (151)
        • TIL (50)
        • C++ (37)
        • Unreal Engine (48)
        • GAS(Gameplay Ability System.. (16)
      • Project (7)
        • Gunfire Paragon (5)
        • Arena Fighters (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    동그래님
    디자인 패턴(Decorator Pattern)
    상단으로

    티스토리툴바