图 1 所以的工厂模式经常在系统开发中用到,但是这并不是工厂模式的最大威力所在(因为这可以通过其他方式解决这个问题)。工厂模式不单是提供了创建对象的接口,其最重要的是延迟了子类的实例化(第二个问题),以下是这种情况的一个工厂的结构示意图:
图 2 中关键中工厂模式的应用并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现:工厂中只是提供了对象创建的接口,其实现将放在工厂的子类Concrete工厂中进行。这是图 2 和图 1 的区别所在。
工厂模式的实现
完整代码示例(code):工厂模式的实现比较简单,这里为了方便初学者的学习和参考,将给出完整的实现代码(所有代码采用 C++实现,并在 VC 6.0 下测试运行)。
代码片断 1:Product.h
//Product.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_
class Product{
public:
virtual ~Product() =0;
protected:
Product(); //屏蔽构造函数
private:
};
class ConcreteProduct:publicProduct{
public:
~ConcreteProduct();
ConcreteProduct();
protected:
private:
};
#endif //~_PRODUCT_H_
代码片断 2:Product.cpp
//Product.cpp
#include "Product.h"
#include<iostream>
using namespace std;
Product::Product(){
}
Product::~Product(){
}
ConcreteProduct::ConcreteProduct(){
cout<<"ConcreteProduct...."<<endl;
}
ConcreteProduct::~ConcreteProduct(){
}
代码片断 3:Factory.h
//Factory.h
#ifndef _FACTORY_H_
#define _FACTORY_H_
class Product;
class Factory{
public:
virtual ~Factory() = 0;
virtual Product* CreateProduct() = 0;
protected:
Factory();
private:
};
class ConcreteFactory:public Factory{
public:
~ConcreteFactory();
ConcreteFactory();
Product* CreateProduct();
protected:
private:
};
#endif //~_FACTORY_H_
代码片断 4:Factory.cpp
//Factory.cpp
#include "Factory.h"
#include "Product.h"
#include <iostream>
using namespace std;
Factory::Factory(){
}
Factory::~Factory(){
}
ConcreteFactory::ConcreteFactory(){
cout<<"ConcreteFactory....."<<endl;
}
ConcreteFactory::~ConcreteFactory(){
}
Product* ConcreteFactory::CreateProduct(){
return new ConcreteProduct();
}











