设计模式复习-抽象工厂模式

有两种硬件,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. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  2. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  3. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  4. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  5. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  6. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  7. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  8. 设计模式之抽象工厂模式(Abstract Factory)摘录

    面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)和低耦合(Coupling). 23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.Fa ...

  9. java 工厂模式的写法_Java23种设计模式之抽象工厂模式

    概述 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. ...

最新文章

  1. java 控制台刷屏 dll_控制台被警告刷屏 · Issue #IXD8V · 卓源软件/JeeSite 4.2 - Gitee.com...
  2. Gentoo源码安装
  3. java comet demo,[转]comet4j的简单应用
  4. 10kv电压互感器型号_电气行业需要知道的10KV电压互感器基本技术参数
  5. ASP.NET MVC涉及到的5个同步与异步,你是否傻傻分不清楚?[上篇]
  6. 本地远程连接阿里云Windows服务器并上传文件的方法
  7. oracle客户端 centos,Centos7-安装oracle客户端11.2.0.4
  8. 码农们来一起讨论下数据库设计....
  9. 使用DotNetOpenAuth搭建OAuth2.0授权框架——Demo代码简单说明
  10. 洛谷 P3397 地毯 【二维差分标记】
  11. [导入]XACT与X3DAudio整合的问题
  12. 3dsmax模型导入超图
  13. 阿里巴巴图表库 Bizcharts 正式开源
  14. 中国电信天翼物联网平台CTWing学习笔记(1)——设备接入(TCP协议)
  15. 支付接口对接技术通用方法 第三方四方支付接口对接开发教程API集成服务
  16. 坚果云 linux 使用方法,Ubuntu坚果云安装与卸载教程
  17. 高冷一字id_一个字的网名-一个字网名带符号-一字网名大全-腾牛个性网
  18. 维特比算法(基于李航)
  19. 美国加州大学河滨分校陈雪梅教授北大招聘Co-PI
  20. 团队作业之一:团队介绍及选题背景与意义

热门文章

  1. Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)
  2. linux系统/var目录的作用
  3. ZooKeeper安装和配置
  4. 古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报: 请编写一个程序,使用上述算法加密或解密用户输入的英文字串...
  5. ubuntu设置root用户密码
  6. WebDataMenu做工具栏程序代码
  7. 【WIN10】程序內文件讀取與保存
  8. 软件项目经理需具备什么样的技术水平?
  9. TCP/IP和OSI4层、7层协议介绍
  10. .NET常见问题汇总