单体模式经常和工厂模式一块使用。系统中工厂对象一般只有一个(一个工厂),系统只要一个工厂创建对象就好了,利于变量的维护。工厂对象同时是一个Singleton模式的实例。
代码:
//product.h
#ifndef _FACTORY_H_
#define _FACTORY_H_
class Product;
class Factory
{
public:
virtual Product * CreateProduct() = 0;
};
class ConcreteFactory:public Factory
{
private:
static ConcreteFactory *_instance;
public:
Product * CreateProduct();
static ConcreteFactory * Instance();
};
#endif
//product.cpp
#include"Factory.h"
#include"Product.h"
#include<iostream>
using namespace std;
ConcreteFactory * ConcreteFactory::_instance = 0;
ConcreteFactory *ConcreteFactory::Instance()
{
if(_instance == 0)
{
_instance = new ConcreteFactory();
}
return _instance;
}
Product* ConcreteFactory::CreateProduct()
{
return new ConcreteProduct();
};
//Factory.h
#ifndef _PRODUCT_H_
#define _PRODUCT_H_
class Product
{
protected:
Product();
};
class ConcreteProduct:public Product
{
public:
ConcreteProduct();
};
#endif
//Factory.cpp
#include"Product.h"
#include<iostream>
using namespace std;
Product::Product()
{
}
ConcreteProduct::ConcreteProduct()
{
cout<<"ConcreteProduct producing..."<<endl;
}
//测试代码:
#include"Product.h"
#include"Factory.h"
#include<iostream>
using namespace std;
int main(void)
{
Factory *sgn = ConcreteFactory::Instance();
Product *pro = sgn->CreateProduct();
Factory *sgn1 = ConcreteFactory::Instance();
if(sgn == sgn1)
cout<<true<<endl;
return 0;
}