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

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

        有两种硬件,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;

}

原文地址:https://www.cnblogs.com/csnd/p/12061932.html