Design Patterns2011. 11. 16. 21:21

Abstract Factory, Builder 패턴은 객체에 대한 구성 요소에 대한 생성을 추상화 시켜서 객체를 완성 시켜 나가는 방식 이었지만, Factory Method 는 객체 자체의 생성 부분을 추상화 시키는(서브 클래스가 생성) 것이다. 간단 깔끔하다.

 



Creator = ICreator
ConcreateCreator = FireMonster_Creator, IceMonster_Creator

Product = IMonster
ConcreateProduct = FireMonster, IceMonster


struct IAttackType
{    
    virtual void Attack() = 0;
};

struct FireAttack : public IAttackType
{
    void Attack() { cout << "공격: 불을 뿜다 화이아~" << endl; };
};

struct IceAttack : public IAttackType
{
    void Attack() { cout << "공격: 얼음 화살 ㄱㄱ" << endl; };
};

/////////////

struct IDefensType
{
    virtual void Defenns() = 0;
};

struct AvoidDefens : public IDefensType
{
    void Defenns() { cout << "방어: 회피 하기" << endl << endl; };
};

struct IceShieldDefens : public IDefensType
{
    void Defenns() { cout << "방어: 얼음방패 막기" << endl << endl; };
};

/////////////

struct IMonster
{
    IAttackType* attack_type_;
    IDefensType* defens_type_;
};

struct FireMonster : public IMonster
{
    FireMonster()
    {
        attack_type_ = new FireAttack;
        defens_type_ = new AvoidDefens;
    }
};

struct IceMonster : public IMonster
{
    IceMonster()
    {
        attack_type_ = new IceAttack;
        defens_type_ = new IceShieldDefens;
    }
};

/////////////

struct ICreator
{
    virtual IMonster* CreateMonster() = 0;
    virtual void Operation()
    {
        IMonster* monsetr = CreateMonster();
        monsetr->attack_type_->Attack();
        monsetr->defens_type_->Defenns();
    }
};

struct FireMonster_Creator : public ICreator
{
    IMonster* CreateMonster() 
    {
        return new FireMonster;
    }    
};

struct IceMonster_Creator : public ICreator
{
    IMonster* CreateMonster() 
    {
        return new IceMonster;
    } 
};

////////////

void main()
{   
    ICreator* fire_monster = new FireMonster_Creator;
    fire_monster->Operation();

    ICreator* ice_monster = new IceMonster_Creator;
    ice_monster->Operation();
}

공격: 불을 뿜다 화이아~
방어: 회피 하기

공격: 얼음 화살 ㄱㄱ
방어: 얼음방패 막기

'Design Patterns' 카테고리의 다른 글

Singleton (싱글턴)  (0) 2011.12.06
Prototype  (0) 2011.12.05
Builder  (0) 2011.11.15
Abstract Factory  (0) 2011.11.15
객체지향 설계 원칙 5-5 ISP (Interface Segregation Principle)  (2) 2008.07.08
Posted by 상현달