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;
    
    }
    
    
  • 相关阅读:
    PHP全路径无限分类原理
    SecureCRT上传bash: rz: command not found
    Android利用Fiddler进行网络数据抓包【怎么跟踪微信请求】
    Creating the Help Page in ASP.NET Web API
    Windows上怎么安装ELK
    安装ELK
    How to kill a process on a port on linux 怎么杀死 关掉一个端口
    How to install Mysql in the CentOS
    Hadoop: Setup Maven project for MapReduce in 5mn
    Install Ambari 2.2.0 from Public Repositories(Hadoop)
  • 原文地址:https://www.cnblogs.com/csnd/p/12061932.html
Copyright © 2011-2022 走看看