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;
    
    }
    
    
  • 相关阅读:
    OpenStack(M版)之基础环境配置(2 更换源、安装OpenStack客户端)
    OpenStack(M版)之基础环境配置(1静态ip、网络接口)
    Java关于print、println、printf的区别
    输出1-n的全排列dfs
    统计难题
    单词数
    减肥计划
    Zero Array---思维题
    快速幂+快速乘
    线段树求逆序对
  • 原文地址:https://www.cnblogs.com/csnd/p/12061932.html
Copyright © 2011-2022 走看看