您的位置:首页 > 编程语言 > C语言/C++

设计模式之工厂模式结合单例模式C++计算器代码DEMO(历史代码,贴出学习)

2014-07-22 10:50 1446 查看
// OperationBase.h

#pragma once

#include <Windows.h>
#include <iostream>
using namespace std;

class COperationBase
{
public:
COperationBase();
~COperationBase();

public:
DWORD m_dwNumberSrc;
DWORD m_dwNumberDes;

public:
virtual float GetOperationResult();

};


//OperationBase.cpp

#include "OperationBase.h"

COperationBase::COperationBase()
{
cout<<"Constructor COperationBase"<<endl;
}

COperationBase::~COperationBase()
{
cout<<"Destructor COperationBase"<<endl;
}

float COperationBase::GetOperationResult()
{
float flResult=0;
return flResult;
}


//OperationAdd.h

#pragma once
#include "OperationBase.h"

class COperationAdd:public COperationBase
{
public:
COperationAdd();
~COperationAdd();

virtual float GetOperationResult();

};


//OperationAdd.cpp

#include "OperationAdd.h"

COperationAdd::COperationAdd()
{
cout<<"Constructor COperationAdd"<<endl;
}
COperationAdd::~COperationAdd()
{
cout<<"Destructor COperationAdd"<<endl;
}
float COperationAdd::GetOperationResult()
{
float flResult=0;
flResult=m_dwNumberSrc+m_dwNumberDes;
return flResult;

}


//OperationMul.h

#pragma once
#include "OperationBase.h"

class COperationMul:public COperationBase
{
public:
COperationMul();
~COperationMul();

virtual float GetOperationResult();

};


//OperationMul.cpp

#include "OperationMul.h"

COperationMul::COperationMul()
{
cout<<"Constructor COperationMul"<<endl;
}
COperationMul::~COperationMul()
{
cout<<"Destructor COperationMul"<<endl;
}
float COperationMul::GetOperationResult()
{
float flResult=0;
flResult=m_dwNumberSrc*m_dwNumberDes;
return flResult;

}


//OperationSub.h

#pragma once
#include "OperationBase.h"

class COperationSub:public COperationBase
{
public:
COperationSub();
~COperationSub();

virtual float GetOperationResult();

};


//OperationSub.cpp

#include "OperationSub.h"

COperationSub::COperationSub()
{
cout<<"Constructor COperationSub"<<endl;
}
COperationSub::~COperationSub()
{
cout<<"Destructor COperationSub"<<endl;
}
float COperationSub::GetOperationResult()
{
float flResult=0;
flResult=m_dwNumberSrc-m_dwNumberDes;
return flResult;

}


//OperationDiv.h
#pragma once
#include "OperationBase.h"

class COperationDiv:public COperationBase
{
public:
COperationDiv();
~COperationDiv();

virtual float GetOperationResult();

};


//OperationDiv.cpp

#include "OperationDiv.h"

COperationDiv::COperationDiv()
{
cout<<"Constructor COperationDiv"<<endl;
}
COperationDiv::~COperationDiv()
{
cout<<"Destructor COperationDiv"<<endl;
}
float COperationDiv::GetOperationResult()
{
float flResult=0;
try
{
flResult=m_dwNumberSrc/m_dwNumberDes;
}
catch (float f)
{
cout<<"the divided should be not 0"<<endl;
}

return flResult;

}


//CFactoryContrl.h

#include "OperationAdd.h"
#include "OperationSub.h"
#include "OperationMul.h"
#include "OperationDiv.h"

class CFactoryContrl
{

protected:
CFactoryContrl();

public:
~CFactoryContrl();
static COperationBase * CFactoryOperation(CHAR chOperationFlag);
static CFactoryContrl * ConcreateSingleInstance();
static COperationBase * cpbBase;
private:
static CFactoryContrl * CfcSingleInstance;
};
//CFactoryContrl.cpp

#include "FactoryContrl.h"

CFactoryContrl* CFactoryContrl::CfcSingleInstance=NULL;
COperationBase* CFactoryContrl::cpbBase=NULL;

CFactoryContrl::CFactoryContrl()
{
cout<<"Constructor CFactoryContrl"<<endl;
}

CFactoryContrl* CFactoryContrl::ConcreateSingleInstance()
{
if (CfcSingleInstance==NULL)
{
CfcSingleInstance=new CFactoryContrl();
}
return CfcSingleInstance;
}

COperationBase* CFactoryContrl::CFactoryOperation(CHAR chOperationFlag)
{

switch(chOperationFlag)
{

case '+':
cpbBase=new COperationAdd();
break;
case '-':
cpbBase=new COperationSub();
break;

case '*':
cpbBase=new COperationMul();
break;

case '/':
cpbBase=new COperationDiv();
break;

}
return cpbBase;
}

CFactoryContrl::~CFactoryContrl()
{
cout<<"Destructor CFactoryContrl"<<endl;
delete cpbBase;
}

//MainDemo.cpp

#include "FactoryContrl.h"

int main(void)
{
COperationBase *cobBase;
CFactoryContrl *cfcFactory=CFactoryContrl::ConcreateSingleInstance();
cobBase=cfcFactory->CFactoryOperation('+');
cobBase->m_dwNumberSrc=100;
cobBase->m_dwNumberDes=200;
float flRet=cobBase->GetOperationResult();
cout<<"result: "<<flRet<<endl;

cobBase=cfcFactory->CFactoryOperation('-');
cobBase->m_dwNumberSrc=200;
cobBase->m_dwNumberDes=300;
flRet=cobBase->GetOperationResult();
cout<<"result: "<<flRet<<endl;

cobBase=cfcFactory->CFactoryOperation('*');
cobBase->m_dwNumberSrc=300;
cobBase->m_dwNumberDes=400;
flRet=cobBase->GetOperationResult();
cout<<"result: "<<flRet<<endl;
return 1;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: