728x90

팩토리 패턴이란 객체들의 동적 생성을 책임지고 관리하는 팩토리를 만들어서 확장이나 관리를 효율적으로 할 수 있게 하는 패턴이다.

 

심플 팩토리 패턴이란 나중에 나올 팩토리 메서드 패턴과, 추상 팩토리 패턴의 기본이 되는 부분이자, 단순하게 객체를 생성하여 넘겨주는 역할을 하는 패턴이다.

 

class Pizza
{
protected:
    char name[256];
    char dough[256];
    char sauce[256];
public:
    Pizza(void) {};
    virtual ~Pizza(void) {};
public:
    inline char* getName() { return name; }

    virtual void prepare() /// 피자 준비
    {
        cout<<"============================="<<endl;
        cout<<name<<"를 준비합니다."<<endl;
        cout<<dough<<"도우 반죽중..."<<endl;
        cout<<sauce<<"소스 추가중..."<<endl;
    }
    virtual void bake() /// 피자 굽기
    {
        cout<<name<<"를 굽습니다."<<endl;
    }
    virtual void cut() /// 피자 자르기
    {
        cout<<name<<"를 자릅니다."<<endl;
    }
    virtual void box() /// 피자 포장하기
    {
        cout<<name<<"를 포장합니다."<<endl;
    }
};

class PepperoniPizza : public Pizza
{
public:
    PepperoniPizza(void)
    {
        strcpy_s( name, "페퍼로니 피자" );
        strcpy_s( dough, "일반 " );
        strcpy_s( sauce, "마리나라 " );
    };
    ~PepperoniPizza(void) {};
};

class ChickenPizza : public Pizza
{
public:
    ChickenPizza(void)
    {
        strcpy_s( name, "치킨 피자" );
        strcpy_s( dough, "쌀 " );
        strcpy_s( sauce, "토마토 " );
    };
    ~ChickenPizza(void) {};
};

class SimplePizzaFactory
{
public:
    SimplePizzaFactory() { cout<<"피자 머신 ON"<<endl; }
    ~SimplePizzaFactory() { cout<<"피자 머신 OFF"<<endl; }
public:
    Pizza* createPizza( int number )
    {
        Pizza* object = NULL;
        switch( number )
        {
        case 1: /// 페퍼로니 피자
            object = new PepperoniPizza();
            break;
        case 2: /// 치킨 피자
            object = new ChickenPizza();
            break;
        default:
            return object;
        }
        return object;
    };
};

 

 

 

PepperoniPizza 클래스와 ChickenPizze 클래스는 Pizza 클래스를 상속 받고 있고

Pizza 클래스에는 피자들의 공통되는 메소드 들이 정의 되어 있다.

SimplePizzaFactory 클래스에는 createPizza 메소드에서 동적으로 객체들을 생성해서 넘겨주는 역할을 하고 있다.

 

후에는 새로운 피자를 추가하거나, 혹은 기존 피자 종류를 삭제해야한다면 simplePizzaFactory 클래스안에서 수정해주기만 하면 된다.

 

*심플 팩토리는 하나의 객체 안에서 수많은 서로 다른 객체들이 동적으로 생성될때 사용하면 유용하다.

 

 

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침