Layering & Contract Philosophy With additional indirection
windows
Abstract Factoryide
1 //The example code is as following: 2 class CAbstractProductA; 3 class CAbstractProductB; 4 // multiple families of products. 5 class CProductA1:public CAbstractProductA; 6 class CProductB1:public CAbstractProductB; 7 class CProductA2:public CAbstractProductA; 8 class CProductB2:public CAbstractProductB; 9 10 class CAbstractFactory 11 { 12 public: 13 virtual CAbstractProductA* CreateProductA() = 0; 14 virtual CAbstractProductA* CreateProductB() = 0; 15 }; 16 class CConreateFactory1:public CAbstractFactory; //indirection layer 17 { 18 public: 19 virtual CAbstractProductA* CreateProductA() { return new CProductA1; } 20 virtual CAbstractProductB* CreateProductB() { return new CProductB1; } 21 } 22 class CConreateFactory2:public CAbstractFactory;//indirection layer 23 { 24 public: 25 virtual CAbstractProductA* CreateProductA() { return new CProductA2; } 26 virtual CAbstractProductB* CreateProductB() { return new CProductB2; } 27 } 28 29 class CClient 30 { 31 public: 32 CAbstractFactory *pFactory = NULL; 33 void main() 34 { 35 if ( the system is windows )
{ 36 pFactory = new CConreateFactory1();
} 37 else
{ 38 pFactory = new CConreateFactory2(); 39 } 40 CAbstractProductA *pProductA = pFactory->CreateProductA(); 41 CAbstractProductB *pProductB = pFactory->CreateProductB(); 42 } 43 };
Applicability
Use the Abstract Factory pattern when:this
Participantsspa
Collaborationscode
From:Design Patterns:Elements of Reusable Object-Oriented Software, by GoForm