C++模板工厂示例

/// 1.定义数据访问接口
class IDataAccessInterface
{
public:
  virtual IDataInterface(){}
  /// 执行数据库 增删改操作
  virtual void exeSql(string strSql) = 0;
};
 
/// 2.数据访问接口实现类
class CDataAccessImp: public IDataInterface 
{
  CDataAccessImp(){}
  virtual ~CDataAccessImp() {}
  void exeSql(string strSql) {cout<<"CDataAccessImp"<<endl;}
};
 
/// 3.获取数据库实例的工厂
///  不需要在工厂的getInstance中进行大量的if判断(类似java的反射)
template<typename T>
class CFactoryManager
{
public:
  static SmartPtr<IDataInterface> getInstance();
};
 
template<class T>
SmartPtr<IDataInterface> CFactoryManager<T>::getInstance()
{
  SmartPtr<IDataInterface> pImp(new T());
  return pImp;
}
 
/// 4.测试如下:
SmartPtr<IDataAccessInterface> pDataAccessInterface = CFactoryManager<CDataAccessImp>::getInstance();
pDataAccessInterface->exeSql("DELETE FROM student WHERE ID=1");

猜你喜欢

转载自www.cnblogs.com/kinglxg/p/13166360.html