抽象工厂模式

时间:2022-04-26
本文章向大家介绍抽象工厂模式,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、相关介绍

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 }