Factory模式的2个主要功能:
1)定义创建对象的接口,封装了对象的创建;2)使得具体化类的工作延迟到子类中;
举例如下:
vs2008编译通过:
#pragma once
class Product
{
public:
Product(void);
virtual ~Product(void)=0;
};
class ConcreateProduct:public Product
{
public:
ConcreateProduct();
~ConcreateProduct();
protected:
private:
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "Product.h"
#include <iostream>
using namespace std;
Product::Product(void)
{
}
Product::~Product(void)
{
}
ConcreateProduct::ConcreateProduct()
{
cout<<"Concreate Product ...."<<endl;
}
ConcreateProduct::~ConcreateProduct()
{
cout<<"Concreate exit ...."<<endl;
}
#pragma once
//class Product;
#include "Product.h"
class Factory_1
{
public:
Factory_1(void);
virtual ~Factory_1(void)=0;
virtual Product *CreateProduct()=0;
};
class ConcreateFactory:public Factory_1
{
public:
~ConcreateFactory();
ConcreateFactory();
Product *CreateProduct();
private:
};
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "Factory_1.h"
#include "Product.h"
#include <iostream>
using namespace std;
Factory_1::Factory_1(void)
{
}
Factory_1::~Factory_1(void)
{
}
ConcreateFactory::ConcreateFactory()
{
cout<< "concreateFactory ..."<<endl;
}
ConcreateFactory::~ConcreateFactory()
{
cout<<"exit factory....."<<endl;
}
Product *ConcreateFactory::CreateProduct()
{
return new ConcreateProduct();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Factory.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "Factory_1.h"
#include "Product.h"
#include "windows.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
Factory_1 *fac=new ConcreateFactory();
Product *p=fac->CreateProduct();
Sleep(5000);
return 0;
}
结果如下:
concreateFactory ...
Concreate Product ....
请按任意键继续. . .