抽象工厂模式
时间: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 }
- Python3 pandas read_csv 读取txt文件报错:IOError: Initializing from file failed
- dataguard添加临时数据文件的bug(r7笔记第27天)
- 简单易学的机器学习算法——线性支持向量机
- Java设计模式-模板方式模式
- 由一条create语句的问题对比mysql和oracle中的date差别 (r7笔记第26天)
- Java设计模式-命令模式
- 关于执行计划中的%CPU的含义 (r7笔记第25天)
- Java设计模式-享元模式
- 简单易学的机器学习算法——线性可分支持向量机
- 基于gensim的Doc2Vec简析,以及用python 实现简要代码
- 关于db link权限分配的苦旅(一) (r7笔记第42天)
- Java设计模式-责任链模式
- Java设计模式-策略模式
- CPU 100%负载的性能优化分析(r7笔记第40天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Real World CTF 2018 bookhub 总结
- python http.server open redirect vulnerability
- ELK-elasticsearch-6.3.2插件【head,bigdesk,cerebro[kopf]】安装
- ELK-kibana-6.3.2部署
- node.js + postgres 从注入到Getshell
- ELK-logstash-6.3.2部署
- K8S节点异常怎么办?TKE"节点健康检查和自愈"来帮忙
- ELK-logstash-6.3.2-常用配置
- ELK-elkstack-使用消息队列
- kafka_2.11-2.0.0_安装部署
- 谈escapeshellarg绕过与参数注入漏洞
- Django debug page XSS漏洞(CVE-2017-12794)分析
- kafka_2.11-2.0.0_常用操作
- shell脚本:通过域名获取证书的过期时间
- Shell按行读取文件的3种方法