Factory模式的两个最重要的功能: 1)定义创建对象的接口,封装了对象的创建; 2)使得具体化类的工作延迟到了子类中。 #pragma once #ifndef _CFactory_H_ #define _CFactory_H_ class CProduct; // 工厂接口 class CFactory { public: virtual ~CFactory() = 0; public: virtual CProduct* CreateProductA() = 0; virtual CProduct* CreateProductB() = 0; protected: CFactory(); private: }; // 具体工厂 class CConcreteFactory:public CFactory { public: CConcreteFactory(); virtual ~CConcreteFactory(); public: virtual CProduct* CreateProductA(); virtual CProduct* CreateProductB(); protected: private: }; #endif //~_CFactory_H_ #include "Factory.h" #include "Product.h" #include <iostream> using namespace std; CFactory::CFactory() { } CFactory::~CFactory() { } CConcreteFactory::CConcreteFactory() { cout<<"Concrete Factory....."<<endl; } CConcreteFactory::~CConcreteFactory() { } CProduct* CConcreteFactory::CreateProductA() { cout<<"CreateProductA() --> Concrete Product A....."<<endl; return new CConcreteProductA(); } CProduct* CConcreteFactory::CreateProductB() { cout<<"CreateProductB() --> Concrete Product B....."<<endl; return new CConcreteProductB(); } #pragma once #ifndef _PRODUCT_H_ #define _PRODUCT_H_ // 产品接口 class CProduct { public: virtual ~CProduct() = 0; protected: CProduct(); private: }; // 具体产品A class CConcreteProductA:public CProduct { public: ~CConcreteProductA(); CConcreteProductA(); protected: private: }; // 具体产品B class CConcreteProductB:public CProduct { public: ~CConcreteProductB(); CConcreteProductB(); protected: private: }; #endif //~_PRODUCT_H_ #include "StdAfx.h" #include "Product.h" #include <iostream> using namespace std; CProduct::CProduct() { } CProduct::~CProduct() { } CConcreteProductA::CConcreteProductA() { cout<<"Concrete Product A...."<<endl; } CConcreteProductA::~CConcreteProductA() { } CConcreteProductB::CConcreteProductB() { cout<<"Concrete Product B...."<<endl; } CConcreteProductB::~CConcreteProductB() { } // Factory_Pattern.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "Factory.h" #include "Product.h" #include <iostream> using namespace std; int main(int argc,char* argv[]) { // 新建一个工厂对象 CFactory* pFactory = new CConcreteFactory(); cout<<"**********************************************"<<endl; // 使用工厂对象创建一个产品对象A CProduct* pProductA = pFactory->CreateProductA(); cout<<"**********************************************"<<endl; // 使用工厂对象创建一个产品对象B CProduct* pProductB = pFactory->CreateProductB(); system("pause"); return 0; }