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;
    
    }
    
    
  • 相关阅读:
    gulp教程、gulp-less安装
    vue学习总结
    javascript数组去重
    【操作系统】操作系统高频面试考点总结
    【面经系列】一线互联网大厂前端面试技巧深入浅出总结
    【编程题与分析题】Javascript 之继承的多种实现方式和优缺点总结
    【计算机网络】TCP基础知识详解
    【操作系统】操作系统面试基础知识点总结
    【数据结构与算法】数据结构基础知识总结(面试考点)
    【前端知识体系-JS相关】JS-Web-API总结
  • 原文地址:https://www.cnblogs.com/csnd/p/12061932.html
Copyright © 2011-2022 走看看