一、相关介绍
1、抽象工厂模式提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类。
2、UML图
3、所属类别:创建型
二、C++程序
1 // 抽象工厂模式.cpp : 定义控制台应用程序的入口点。
2 //
3
4 #include "stdafx.h"
5 #include<iostream>
6 using namespace std;
7
8 //linux系列产品
9 class linux
10 {
11 public:
12 linux(){}
13 virtual ~linux(){}
14 virtual void show_price()=0;
15 };
16
17 //linux手机
18 class plinux :public linux
19 {
20 public :
21 plinux()
22 {
23 cout<<"i am a linux phone"<<endl;
24 }
25 virtual ~plinux(){}
26 virtual void show_price();
27 };
28
29 void plinux::show_price()
30 {
31 cout<<"my price is 2000"<<endl;
32 }
33 //linux电脑
34 class PClinux :public linux
35 {
36 public :
37 PClinux()
38 {
39 cout<<"i am a linux PC"<<endl;
40 }
41 virtual ~PClinux(){}
42 virtual void show_price();
43 };
44 void PClinux::show_price()
45 {
46 cout<<"my price is 5000"<<endl;
47 }
48
49 //windows系列产品
50 class windows
51 {
52 public:
53 windows(){}
54 virtual ~windows(){}
55 virtual void show_price()=0;
56 };
57
58
59 //windows 手机
60 class pwindows :public windows
61 {
62 public :
63 pwindows()
64 {
65 cout<<"i am a windows phone"<<endl;
66 }
67 virtual ~pwindows(){}
68 virtual void show_price();
69 };
70
71 void pwindows::show_price()
72 {
73 cout<<"my price is 1999"<<endl;
74 }
75
76 //windows电脑
77 class PCwindows :public windows
78 {
79 public :
80 PCwindows()
81 {
82 cout<<"i am a windows PC"<<endl;
83 }
84 virtual ~ PCwindows();
85 virtual void show_price();
86 };
87
88 void PCwindows::show_price()
89 {
90 cout<<"my price is 4999"<<endl;
91 }
92 //工厂抽象类
93 class factory
94 {
95 public:
96 factory(){}
97 virtual~factory(){}
98 virtual linux* creatlinux()=0;
99 virtual windows*creatwindows()=0;
100 };
101 //手机工厂
102 class phonefactory:public factory
103 {
104 public:
105 phonefactory(){}
106 virtual~phonefactory(){}
107 virtual linux* creatlinux()
108 {
109 return new plinux();
110 }
111 virtual windows* creatwindows()
112 {
113 return new pwindows();
114 }
115 };
116 //电脑工厂
117 class PCfactory:public factory
118 {
119 public:
120 PCfactory(){}
121 virtual~PCfactory(){}
122 virtual linux* creatlinux()
123 {
124 return new PClinux();
125 }
126 virtual windows* creatwindows()
127 {
128 return new PCwindows();
129 }
130 };
131
132 //用户界面
133 int _tmain(int argc, _TCHAR* argv[])
134 {
135 factory *phone=NULL;
136 phone=new phonefactory;
137 linux *phone_linux=phone->creatlinux();
138 phone_linux->show_price();
139 windows *phone_windows=phone->creatwindows();
140 phone_windows->show_price();
141
142 return 0;
143 }