///////////////////////////////////////////////////////////////////// // client.cpp -- uses AbstractFactory to create products // // // // Jim Fawcett, CSE776 - Design Patterns, Summer 2004 // ///////////////////////////////////////////////////////////////////// // ver 1.1 - added static creational function in AbstractLayer // // so client can use the abstract interface // // ver 2.0 - separated abstract interfaces from concrete classes // ///////////////////////////////////////////////////////////////////// #include #include "AbstractFactory.h" // note: does not include headers #include "AbstractProduct.h" // of concrete classes using namespace std; void main( ) { cout << "\n Demonstrating Abstract Factory Pattern " << "\n ========================================\n"; // create concrete factory 1, creata product A, use it const AbstractFactory *pCF1 = AbstractFactory::CreateFactory(AbstractFactory::one); AbstractProductA *pAPA = pCF1->CreateProdA(); pAPA -> showA(); // creata product B, use it AbstractProductB *pAPB = pCF1->CreateProdB(); pAPB -> showB(); delete const_cast(pCF1); delete pAPA; delete pAPB; // create concrete factory 2, creata product A, use it const AbstractFactory *pCF2 = AbstractFactory::CreateFactory(AbstractFactory::two); pAPA = pCF2->CreateProdA(); pAPA -> showA(); // create product B, use it pAPB = pCF2->CreateProdB(); pAPB -> showB(); delete const_cast(pCF2); delete pAPA; delete pAPB; cout << "\n\n"; }