设计模式之抽象工厂(C++实现)

现在可以和工厂模式对比一下,抽象工厂返回的接口不再是产品A和产品B的共同基类Product了,而是产品A、产品B基类(在工厂模式中它们为具体实现类,这里变成了基类)了。此时工厂的抽象和简单工厂中的工厂方法也很类似,就是这些特征区使其别于工厂模式而变成抽象工厂模式了,因此抽象工厂解决的是创建一系列有共同风格的产品(鲁菜还是粤菜),而工厂方法模式解决的创建有共同特征的一系列产品(红烧肉、清蒸鱼它们都是食物)。当然简单工厂的缺陷在抽象工厂中又再次出现了,我要新增加一个产品,工厂抽象接口就要改变了。因此抽象工厂并不比工厂模式完美,只不过是各自的适用领域不同而已。

/*************************************************************Linux.h********************************************/

#ifndef LINUX_H
#define LINUX_H
#include <iostream>
using namespace std;
class Linux
{
public:
	virtual void showVersion() = 0;
};
#endif
/*************************************************************LinuxPC.h********************************************/
#ifndef LINUXPC_H
#define LINUXPC_H

#include "Linux.h"

class LinuxPC : public Linux
{
public:
	void showVersion()
	{
		cout<<"This Version is LinuxPC"<<endl;
	};
};
#endif

/*************************************************************LinuxMobile.h********************************************/

#ifndef LINUXMOBILE_H
#define LINUXMOBILE_H
#include "Linux.h"

class LinuxMobile : public Linux
{
public:
	void showVersion()
	{
		cout<<"This Version is LinuxMobile"<<endl;
	};
};
#endif

/*************************************************************Windows.h********************************************/

#ifndef WINDOWS_H
#define WINDOWS_H
#include <iostream>
using namespace std;
class Windows
{
public:
	virtual void showVersion()=0;
};
#endif

/*************************************************************WindowsPCh********************************************/

#ifndef WINDOWSPC_H
#define WINDOWSPC_H

#include "Windows.h"

class WindowsPC : public Windows
{
public:
	void showVersion()
	{
		cout<<"This Version is WindowsPC"<<endl;
	}
};
#endif

/*************************************************************WindowsMobile.h********************************************/

#ifndef WINDOWSMOBILE_H
#define WINDOWSMOBILE_H
#include "Windows.h"

class WindowsMobile : public Windows
{
public:
	void showVersion()
	{
		cout<<"This Version is WindowsMobile"<<endl;
	}
};
#endif

/*************************************************************Factory.h********************************************/

#ifndef FACTORY_H
#define FACTORY_H
#include "LinuxMobile.h"
#include "LinuxPC.h"
#include "WindowsMobile.h"
#include "WindowsPC.h"
class Factory
{
	Windows *windows;
	Linux *linux;
public:
	Windows * ReturnWindowsVer(char s)
	{
		switch(s)
		{
			case 'm':
				windows = new WindowsMobile;
				return windows;
				break;
			case 'p':
				windows = new WindowsPC;
				return windows;
				break;
		}
	}
	Linux * ReturnLinuxVer(char s)
	{
		switch(s)
		{
			case 'm':
				linux = new LinuxMobile;
				return linux;
				break;
			case 'p':
				linux = new LinuxPC;
				return linux;
				break;
		}
	}
};
#endif

/*************************************************************main.cpp********************************************/

#include "LinuxMobile.h"
#include "LinuxPC.h"
#include "WindowsMobile.h"
#include "WindowsPC.h"
#include "Factory.h"
int main()
{
	Factory factory;
	Linux *linux = factory.ReturnLinuxVer('m');
	Windows *windows = factory.ReturnWindowsVer('p');
	linux->showVersion();
	windows->showVersion();
	getchar();
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值