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 |