추상 팩토리 패턴(Abstract Factory): 특정 클래스를 지정하지 않고 일련의 관련되거나 상호 의존적인 개체를 생성하기 위한 인터페이스를 제공합니다.
패턴 구현:
[code]//create ProductA class ProductA{ public: virtual void Show() = 0; }; class ProductA1: public ProductA{ public: void Show(){ std::cout << "I'm ProductA1\n"; } }; class ProductA2: public ProductA{ public: void Show(){ std::cout << "I'm ProductA2\n"; } }; //create ProductB class ProductB{ public: virtual void Show() = 0; }; class ProductB1: public ProductB{ public: void Show(){ std::cout << "I'm ProductB1\n"; } }; class ProductB2: public ProductB{ public: void Show(){ std::cout << "I'm ProductB2\n"; } }; class Factory{ public: virtual ProductA *CreateProductA() = 0; virtual ProductB *CreateProductB() = 0; }; class Factory1: public Factory{ public: ProductA *CreateProductA(){ return new ProductA1(); } ProductB *CreateProductB(){ return new ProductB1(); } }; class Factory2: public Factory{ public: ProductA *CreateProductA(){ return new ProductA2(); } ProductB *CreateProductB(){ return new ProductB2(); } }; template <typename T> void del(T* obj){ if( obj != NULL){ delete obj; obj = NULL; } }
클라이언트:
[code]int main(){ Factory *factoryObj1 = new Factory1(); ProductA *productObjA1 = factoryObj1->CreateProductA(); ProductB *productObjB1 = factoryObj1->CreateProductB(); productObjA1->Show(); //Output: I'm ProductA1 productObjB1->Show(); //Output: I'm ProductB1 Factory *factoryObj2 = new Factory2(); ProductA *productObjA2 = factoryObj2->CreateProductA(); ProductB *productObjB2 = factoryObj2->CreateProductB(); productObjA2->Show(); //Output:I'm ProductA2 productObjB2->Show(); //Output:I'm ProductB2 del(productObjB2); del(productObjA2); del(factoryObj2); del(productObjB1); del(productObjA1); del(factoryObj1); return 0; }
위 내용은 C++ 디자인 패턴의 추상 팩토리 패턴에 대한 간략한 소개 내용입니다. PHP 중국어 웹사이트(www.php.cn)를 주목하세요!