ABSTRACT FACTORY 추상 팩토리 패턴
- 서로 관련있거나 독리정인 여러 객체군을 생성 하는데 이용.
#include <iostream> using namespace std; class AbstractProductA{ public: virtual void print() = 0; }; class AbstractProductB{ public: virtual void print() = 0; }; class ConcreteProductA1 : public AbstractProductA{ private: void print() { cout << "ConcreteProduct A1" << endl; } }; class ConcreteProductA2: public AbstractProductA{ private: void print() { cout << "ConcreteProduct A2" << endl; } }; class ConcreteProductB1 : public AbstractProductB{ private: void print() { cout << "ConcreteProduct B1" << endl; } }; class ConcreteProductB2 : public AbstractProductB{ private: void print() { cout << "ConcreteProduct B2" << endl; } }; class AbstractFactory{ public: virtual AbstractProductA* createProductA() = 0; virtual AbstractProductB* createProductB() = 0; }; class ConcreteFactory1 : public AbstractFactory{ public: AbstractProductA* createProductA() { return new ConcreteProductA1; } AbstractProductB* createProductB() { return new ConcreteProductB1; } }; class ConcreteFactory2 : public AbstractFactory{ public: AbstractProductA* createProductA() { return new ConcreteProductA2; } AbstractProductB* createProductB() { return new ConcreteProductB2; } }; int main(){ ConcreteFactory1 factory1; ConcreteFactory2 factory2; AbstractProductA* A1 = factory1.createProductA(); A1->print(); AbstractProductB* B1 = factory1.createProductB(); B1->print(); AbstractProductA* A2 = factory2.createProductA(); A2->print(); AbstractProductB* B2 = factory2.createProductB(); B2->print(); delete A1; delete B1; delete A2; delete B2; return 0; }
템플릿을 이용한 ConcreteFactory 수 줄이기. template <typename T> class AbstractFactory{ public: virtual T* createProduct() = 0; }; template<typename T1, typename T2> class ConcreteFactory : public AbstractFactory<T1>{ public: T1* createProduct() { return new T2; } }; int main(){ ConcreteFactory<AbstractProductA,ConcreteProductA1> factory1; ConcreteFactory<AbstractProductB,ConcreteProductB1> factory2; ConcreteFactory<AbstractProductA,ConcreteProductA2> factory3; ConcreteFactory<AbstractProductB,ConcreteProductB2> factory4; AbstractProductA* a = factory1.createProduct(); AbstractProductB* b = factory2.createProduct(); AbstractProductA* c = factory3.createProduct(); AbstractProductB* d = factory4.createProduct(); a->print(); b->print(); c->print(); d->print(); }
'Study > Design Patterns c++' 카테고리의 다른 글
Design Patterns COMMAND 명령 패턴 (0) | 2018.08.03 |
---|---|
Design Patterns CHAIN OF RESPONSIBILITY 책임 연쇄 패턴 패턴 C++ (0) | 2018.07.03 |
Design Patterns PROXY 프록시 패턴 C++ (0) | 2018.07.02 |
Design Patterns FLYWEIGHT 플라이급 패턴 패턴 C++ (0) | 2018.07.02 |
Design Patterns FACADE 퍼사드 패턴 C++ (0) | 2018.06.19 |