}
//IHumanFactory.h
#pragmaonce
#include"IHuman.h"
classIHumanFactory
{
public:
IHumanFactory(void)
{
}
virtual~IHumanFactory(void)
{
}
virtualIHuman*CreateHuman()=0;
};
//YellowHuman.h
#pragmaonce
#include"ihumanfactory.h"
classCYellowHumanFactory:
publicIHumanFactory
{
public:
CYellowHumanFactory(void);
~CYellowHumanFactory(void);
virtualIHuman*CreateHuman(void);
};
//YellowHumanFactory.cpp
#include"StdAfx.h"
#include"YellowHumanFactory.h"
#include"YellowHuman.h"
CYellowHumanFactory:
:
CYellowHumanFactory(void)
{
}
CYellowHumanFactory:
:
~CYellowHumanFactory(void)
{
}
IHuman*CYellowHumanFactory:
:
CreateHuman(void)
{
returnnewCYellowHuman();
}
//WhiteHuman.h
#pragmaonce
#include"ihumanfactory.h"
classCWhiteHumanFactory:
publicIHumanFactory
{
public:
CWhiteHumanFactory(void);
~CWhiteHumanFactory(void);
virtualIHuman*CreateHuman(void);
};
//WhiteHumanFactory.cpp
#include"StdAfx.h"
#include"WhiteHumanFactory.h"
#include"WhiteHuman.h"
CWhiteHumanFactory:
:
CWhiteHumanFactory(void)
{
}
CWhiteHumanFactory:
:
~CWhiteHumanFactory(void)
{
}
IHuman*CWhiteHumanFactory:
:
CreateHuman(void)
{
returnnewCWhiteHuman();
}
//BlackHuman.h
#pragmaonce
#include"ihumanfactory.h"
classCBlackHumanFactory:
publicIHumanFactory
{
public:
CBlackHumanFactory(void);
~CBlackHumanFactory(void);
virtualIHuman*CreateHuman();
};
//BlackHumanFactory.cpp
#include"StdAfx.h"
#include"BlackHumanFactory.h"
#include"BlackHuman.h"
CBlackHumanFactory:
:
CBlackHumanFactory(void)
{
}
CBlackHumanFactory:
:
~CBlackHumanFactory(void)
{
}
IHuman*CBlackHumanFactory:
:
CreateHuman()
{
returnnewCBlackHuman();
}
//FactoryMethod.cpp
//FactoryMethod.cpp:
定义控制台应用程序的入口点。
//
#include"stdafx.h"
#include"IHuman.h"
#include"YellowHuman.h"
#include"WhiteHuman.h"
#include"BlackHuman.h"
#include"SimpleHumanFactory.h"
#include"StandardHumanFactory.h"
#include"IHumanFactory.h"
#include"YellowHumanFactory.h"
#include"WhiteHumanFactory.h"
#include"BlackHumanFactory.h"
#include
usingstd:
:
cout;
usingstd:
:
endl;
usingstd:
:
string;
voidDoFactoryMethod1()
{
cout<<"----------第一批人是这样的:
黄种人工厂来生产黄种人"< IHumanFactory*pHumanFactory=newCYellowHumanFactory();
IHuman*pHuman=pHumanFactory->CreateHuman();
pHuman->Cry();
pHuman->Laugh();
pHuman->Talk();
deletepHuman;
deletepHumanFactory;
}
voidDoFactoryMethod2()
{
cout<<"----------第二批人是这样的:
白种人工厂来生产白种人"< IHumanFactory*pHumanFactory=newCWhiteHumanFactory();
IHuman*pHuman=pHumanFactory->CreateHuman();
pHuman->Cry();
pHuman->Laugh();
pHuman->Talk();
deletepHuman;
deletepHumanFactory;
}
voidDoFactoryMethod3()
{
cout<<"----------第一批人是这样的:
黑种人工厂来生产黑种人"< IHumanFactory*pHumanFactory=newCBlackHumanFactory();
IHuman*pHuman=pHumanFactory->CreateHuman();
pHuman->Cry();
pHuman->Laugh();
pHuman->Talk();
deletepHuman;
deletepHumanFactory;
}
int_tmain(intargc,_TCHAR*argv[])
{
//工厂方法
cout<<"----------工厂方法:
"< DoFactoryMethod1();
DoFactoryMethod2();
DoFactoryMethod3();
_CrtSetDbgFlag(_CRTDBG_LEAK_CHECK_DF|_CRTDBG_ALLOC_MEM_DF);
_CrtDumpMemoryLeaks();
return0;
}
工厂方法属于创建型模式,适合于产品不太多的情况。
产品如果很多,则需要用抽象工厂来实现。