/*************************************************************************
> File Name: define_1.h
> Author: Code4
> Mail: 1614652215@qq.com
> Created Time: 2018年04月13日 星期五 10时10分09秒
************************************************************************/
//简单工厂模式+单件模式的定义
//有两种种表,每个表有两种操作查询,添加,每个表只能有一份
#pragma once
#include "iostream"
#include "string"
using namespace std ;
//创建一个接口
class Table{
public:
virtual void Find() = 0 ;
virtual void Add() = 0 ;
} ;
//一种表实现
class Utable:public Table{
public:
void Find();
void Add() ;
};
//另一个表实现
class Dtable: public Table{
public :
void Find() ;
void Add() ;
};
//一个工厂,只能实例化一个,里面定义逻辑 ,选择哪一种表
class Factory {
public :
static Factory *Get() ;
Table *creat(string which) ;
private:
static Factory *only ;
Factory(){} ; //将构造函数放入Private 里面,不能被多次实例化
};
//对static 数据进行初始话
Factory * Factory::only = NULL ;
/*************************************************************************
> File Name: index_1.cpp
> Author: Code4
> Mail: 1614652215@qq.com
> Created Time: 2018年04月13日 星期五 10时26分33秒
************************************************************************/
//实现简单工厂的实现
#include "iostream"
#include "define_1.h"
#include "string"
#include "cstring"
using namespace std ;
void Utable :: Find (){
cout<<"Utable Find " ;
}
void Utable :: Add (){
cout<<"Utable Add" ;
}
void Dtable :: Find(){
cout<<"Dtable Find " ;
}
void Dtable :: Add(){
cout<<"Dtable Add" ;
}
//单件模式,每一个工厂只能实例化一次,意味着只能产生一次产品
//定义Static 函数在定义的时候不需要添加
Factory * Factory::Get(){
if ( only == NULL ){
only = new Factory() ;
}
else {
cout<<"sample has already contain"<<endl ;
}
return only ;
}
//选择哪一种表
Table * Factory :: creat(string which) {
if (which == "User")
{
return new Utable() ;
}
else{
return new Dtable() ;
}
}
/*************************************************************************
> File Name: main.cpp
> Author: Code4
> Mail: 1614652215@qq.com
> Created Time: 2018年04月13日 星期五 11时13分14秒
************************************************************************/
//实现简单工厂模式
//有两种表,每种表能实现查询添加功能,
//抽象出查询添加接口,两种表类继承实现
//抽象工厂实例化一种表,去实现调用相应的操作 // 其中使用单件,程序只能存在一个工厂实例
#include "iostream"
#include "define_1.h"
#include "index_1.cpp"
#include "string"
using namespace std ;
int main(){
string which ;
cout<<"输入表的类型User or Date";
cin>>which ;
Factory * l = Factory :: Get() ;
Table * m = l->creat(which);
m->Find();
return 0 ;
}