Implement "GOF's Abstract Factory" Using C++(Series of Gof patterns using C++ 1st article)

Implement "GOF's Abstract Factory" Using C++(Series of Gof patterns using C++ 1st article)

 

The Gof has 23 design patterns , but in most of  the design books , the E.G is written in Java , So  from now on , I will write about 23 articles to implement them using C++ , the design pattern itself is discussible , so welcome everyone to give his excelent idea to me , My QQ: 286259397 And My MSN : [email protected].
Welcome every one to express his ideas!

 


This is the First Arcticle: ABSTRACT FACTORY

Here the theory goes:

/*The theory basis :
  While using abstract factory , the  situation will be almost like this:
  we can create a real product from the abstract product , there are many series of product ,
  and the all have the similar property and operations , the operations can be different inner,
  but all the same interface outer;
  What's need?
  An abstract factory , and many real factory derived from this factory create real products
  An abstract product , any many real product derived from this proudct ;
  An abstract Interface , and many real Interface  that realize the interface
*/

Here the code goes:

 

  1 /**/ /********************************************************************
  2created: 2007/04/18
  3created: 18:4:2007   0:42
  4filename:  C:\testvc6\TestStll\TestStll.cpp
  5file path: C:\testvc6\TestStll
  6file base: TestStll
  7file ext: cpp
  8author:  Chang xinglong(King.C)
  9
 10  purpose: Abstract Factory
 11*********************************************************************/

 12
 13
 14 #include  < iostream >
 15 using   namespace  std;
 16
 17 // the abstract implementation
 18 class  AbsProductImp 
 19 {
 20public:
 21    virtual void DrawProductShape()=0;
 22}
;
 23 // the abstract factory
 24 class  AbsFactory
 25 {
 26public:
 27    virtual AbsProductImp * CreateAProductImp()=0;  //Create a real implement
 28}
;
 29
 30 // the abstract product 
 31 class  AbsProduct
 32 {
 33public:
 34    //virtual void DrawProductShape();
 35protected:
 36    AbsProductImp * _imp;  //implement pointer , it's decide which implement be execute
 37    AbsFactory * _Fac;// this pointer will point to the real factory 
 38    
 39}
;
 40 //  Derived begain [4/18/2007 Chang Xinglong(King.C)]
 41
 42 class  AProductImp : public  AbsProductImp  // the real a product
 43 {
 44public:
 45    void DrawProductShape()
 46    {
 47        cout<<"A product is describing itselfA is implement complete "<<endl;
 48    }

 49    
 50}
;
 51 class  BProductImp : public  AbsProductImp   // the real a product
 52 {
 53public:
 54    virtual void DrawProductShape()
 55    {
 56        cout<<"B product is describing itselfB is implement complete "<<endl;
 57    }

 58    
 59}
;
 60 //  Derived the Factory [4/18/2007 Chang Xinglong(King.C)]
 61 class  AFactory : public  AbsFactory // The factory that create A
 62 {
 63public:
 64    virtual AbsProductImp * CreateAProductImp()
 65    {
 66        return new AProductImp;
 67    }

 68    
 69}
;
 70
 71 class  BFactory :  public  AbsFactory
 72 {
 73public:
 74    virtual AbsProductImp * CreateAProductImp()
 75    {
 76        return new BProductImp;
 77    }

 78    
 79}
;
 80
 81 class  AProduct : public  AbsProduct
 82 {
 83public:
 84    AProduct()
 85    {
 86        _Fac=new AFactory; // specific the AFactory to create A
 87        _imp=_Fac->CreateAProductImp(); // polymorphism , select the product implement
 88        _imp->DrawProductShape(); //construct it self
 89    }

 90}
;
 91
 92 class  BProduct : public  AbsProduct
 93 {
 94public:
 95    BProduct()
 96    {
 97        _Fac=new BFactory; // specific the BFactory to create B
 98        _imp=_Fac->CreateAProductImp(); // polymorphism , select the product implement
 99        _imp->DrawProductShape(); //construct it self
100    }

101}
;
102 //  Derived the products [4/18/2007 Administrator]
103 int  main( int  argc,  char *  argv[])
104 {
105    AProduct _a;  //Create An AProduct
106    BProduct _b;  //Create A  BProduct
107    return 1;
108}

109
110
111
112

你可能感兴趣的:(Implement "GOF's Abstract Factory" Using C++(Series of Gof patterns using C++ 1st article))