zoukankan      html  css  js  c++  java
  • 设计模式复习-抽象工厂模式

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

            有两种硬件,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;
    
    }
    
    
  • 相关阅读:
    【转】你必须知道的EF知识和经验
    【转】ASP.NET MVC中错误日志信息记录
    js获取当前iframe的ID
    【转】Code First 属性详解
    【转】MVC中code first方式开发,数据库的生成与更新(Ef6)
    【转】MVC form提交实体接收参数时空字符串值变成null
    【转】别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework
    Jquery中.attr()和.data()的区别
    关于在用curl函数post网页数据时,遇上表单提交 type为submit 类型而且没有name和id时可能遇到的问题及其解决方法
    浅谈 php 采用curl 函数库获取网页 cookie 和 带着cookie去访问 网页的方法!!!!
  • 原文地址:https://www.cnblogs.com/csnd/p/12061932.html
Copyright © 2011-2022 走看看