设计模式复习-抽象工厂模式
设计模式复习-抽象工厂模式
有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展一个Android系统,处理这样的问题,尽量满足OCP。
//FactoryMode.h
#pragma once#include<iostream>using namespace std;class CinterfaceOS {public:virtual void StartOs() = 0;virtual void CloseOs() = 0;};class CWindows : public CinterfaceOS {public:void StartOs() {cout << "Start Windows OS" << endl;}void CloseOs() {cout << "Close Windows OS" << endl;}};class CLinux : public CinterfaceOS {public:void StartOs() {cout << "Start Linux OS" << endl;}void CloseOs() {cout << "Close Linux OS" << endl;}};class CWindowsPC : public CWindows {public:void StartOs() {cout << "StartWindowsPC:";CWindows::StartOs();}void CloseOs() {cout << "CloseWindowsPC:";CWindows::CloseOs();}};class CWindowsPhone : public CWindows {public:void StartOs() {cout << "StartWindowsPhone:";CWindows::StartOs();}void CloseOs() {cout << "CloseWindowsPhone:";CWindows::CloseOs();}};class CLinuxPC : public CLinux {public:void StartOs() {cout << "StartLinuxPC:";CLinux::StartOs();}void CloseOs() {cout << "CloseLinuxPC:";CLinux::CloseOs();}};class CLinuxPhone : public CLinux {public:void StartOs() {cout << "StartLinuxPhone:";CLinux::StartOs();}void CloseOs() {cout << "CloseLinuxPhone:";CLinux::CloseOs();}};class CInterfaceFactory {public:virtual CinterfaceOS * CreatePcOs() = 0;virtual CinterfaceOS * CreatePhoneOs() = 0;};class CCreateFactoryWindows : public CInterfaceFactory {CinterfaceOS * CreatePcOs() {return new CWindowsPC();}CinterfaceOS * CreatePhoneOs() {return new CWindowsPhone();}};class CCreateFactoryLinux : public CInterfaceFactory {CinterfaceOS * CreatePcOs() {return new CLinuxPC();}CinterfaceOS * CreatePhoneOs() {return new CLinuxPhone();}};#include "stdafx.h"#include "FactoryMode.h"#include <iostream>using namespace std;int main() {CInterfaceFactory *pHashFactoryWindows = NULL;CinterfaceOS *pHashOsWindowsPC = NULL;CinterfaceOS *pHashOsWindowsPhone = NULL;CInterfaceFactory *pHashFactoryLinux = NULL;CinterfaceOS *pHashOsLinuxPC = NULL;CinterfaceOS *pHashOsLinuxPhone = NULL;pHashFactoryWindows = new CCreateFactoryWindows();pHashOsWindowsPC = pHashFactoryWindows->CreatePcOs();pHashOsWindowsPhone = pHashFactoryWindows->CreatePhoneOs();pHashFactoryLinux = new CCreateFactoryLinux();pHashOsLinuxPC = pHashFactoryLinux->CreatePcOs();pHashOsLinuxPhone = pHashFactoryLinux->CreatePhoneOs();pHashOsWindowsPC->StartOs();pHashOsWindowsPC->CloseOs();pHashOsWindowsPhone->StartOs();pHashOsWindowsPhone->CloseOs();pHashOsLinuxPC->StartOs();pHashOsLinuxPC->CloseOs();pHashOsLinuxPhone->StartOs();pHashOsLinuxPhone->CloseOs();delete pHashOsWindowsPC;delete pHashOsWindowsPhone;delete pHashFactoryWindows;delete pHashOsLinuxPC;delete pHashOsLinuxPhone;delete pHashFactoryLinux;//getchar();return 0;}
设计模式复习-抽象工厂模式相关推荐
- 设计模式系列·抽象工厂模式
前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...
- 设计模式三—抽象工厂模式
设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...
- 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)
原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...
- 设计模式之四(抽象工厂模式第三回合)
原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...
- python抽象工厂模式_Python设计模式之抽象工厂模式
Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...
- 设计模式-04抽象工厂模式
设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...
- C#设计模式(4)——抽象工厂模式
C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...
- 设计模式之抽象工厂模式(Abstract Factory)摘录
面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...
- java 工厂模式的写法_Java23种设计模式之抽象工厂模式
概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...
最新文章
- java 控制台刷屏 dll_控制台被警告刷屏 · Issue #IXD8V · 卓源软件/JeeSite 4.2 - Gitee.com...
- Gentoo源码安装
- java comet demo,[转]comet4j的简单应用
- 10kv电压互感器型号_电气行业需要知道的10KV电压互感器基本技术参数
- ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[上篇]
- 本地远程连接阿里云Windows服务器并上传文件的方法
- oracle客户端 centos,Centos7-安装oracle客户端11.2.0.4
- 码农们来一起讨论下数据库设计....
- 使用DotNetOpenAuth搭建OAuth2.0授权框架——Demo代码简单说明
- 洛谷 P3397 地毯 【二维差分标记】
- [导入]XACT与X3DAudio整合的问题
- 3dsmax模型导入超图
- 阿里巴巴图表库 Bizcharts 正式开源
- 中国电信天翼物联网平台CTWing学习笔记(1)——设备接入(TCP协议)
- 支付接口对接技术通用方法 第三方四方支付接口对接开发教程API集成服务
- 坚果云 linux 使用方法,Ubuntu坚果云安装与卸载教程
- 高冷一字id_一个字的网名-一个字网名带符号-一字网名大全-腾牛个性网
- 维特比算法(基于李航)
- 美国加州大学河滨分校陈雪梅教授北大招聘Co-PI
- 团队作业之一:团队介绍及选题背景与意义