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 :
cxl82116@msn.com.
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>
15using namespace std;
16
17//the abstract implementation
18class AbsProductImp
19{
20public:
21 virtual void DrawProductShape()=0;
22};
23//the abstract factory
24class AbsFactory
25{
26public:
27 virtual AbsProductImp * CreateAProductImp()=0; //Create a real implement
28};
29
30//the abstract product
31class 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
42class 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};
51class 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)]
61class AFactory :public AbsFactory//The factory that create A
62{
63public:
64 virtual AbsProductImp * CreateAProductImp()
65 {
66 return new AProductImp;
67 }
68
69};
70
71class BFactory : public AbsFactory
72{
73public:
74 virtual AbsProductImp * CreateAProductImp()
75 {
76 return new BProductImp;
77 }
78
79};
80
81class 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
92class 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]
103int 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