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!
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
*/
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
/**/
/********************************************************************
2
created: 2007/04/18
3
created: 18:4:2007 0:42
4
filename: C:\testvc6\TestStll\TestStll.cpp
5
file path: C:\testvc6\TestStll
6
file base: TestStll
7
file ext: cpp
8
author: 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
{
20
public:
21
virtual void DrawProductShape()=0;
22
}
;
23
//
the abstract factory
24
class
AbsFactory
25
{
26
public:
27
virtual AbsProductImp * CreateAProductImp()=0; //Create a real implement
28
}
;
29
30
//
the abstract product
31
class
AbsProduct
32
{
33
public:
34
//virtual void DrawProductShape();
35
protected:
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
{
44
public:
45
void DrawProductShape()
46
{
47
cout<<"A product is describing itself
A is implement complete "<<endl;
48
}
49
50
}
;
51
class
BProductImp :
public
AbsProductImp
//
the real a product
52
{
53
public:
54
virtual void DrawProductShape()
55
{
56
cout<<"B product is describing itself
B 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
{
63
public:
64
virtual AbsProductImp * CreateAProductImp()
65
{
66
return new AProductImp;
67
}
68
69
}
;
70
71
class
BFactory :
public
AbsFactory
72
{
73
public:
74
virtual AbsProductImp * CreateAProductImp()
75
{
76
return new BProductImp;
77
}
78
79
}
;
80
81
class
AProduct :
public
AbsProduct
82
{
83
public:
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
{
94
public:
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


2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19



20

21

22

23

24

25



26

27

28

29

30

31

32



33

34

35

36

37

38

39

40

41

42

43



44

45

46



47


48

49

50

51

52



53

54

55



56


57

58

59

60

61

62



63

64

65



66

67

68

69

70

71

72



73

74

75



76

77

78

79

80

81

82



83

84

85



86

87

88

89

90

91

92

93



94

95

96



97

98

99

100

101

102

103

104



105

106

107

108

109

110

111

112
