业务代表模式简介
业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦。用来减少通信或对表示层代码中的业务层代码的远程查询功能。
业务层里的实体
1、客户端(Client) - 表示层。
2、业务代表(Business Delegate) - 一个为客户端实体提供的入口类,它提供了对业务服务方法的访问。
3、查询服务(LookUp Service) - 查找服务对象,负责获取相关的业务服务实体对象,并提供业务对象对业务服务对象的访问。
4、业务服务(Business Service) - 业务服务接口。实现了该业务服务的实体类,提供了实际的业务实现逻辑。
采用菜鸟教程的例子,这里用C++实现
#include<iostream>
#include<string>
using namespace std;
//业务代表模式
//创建业务服务抽象类BussinessService,提供业务服务接口
class BussinessService
{
public:
BussinessService() {};
virtual ~BussinessService() {};
virtual void doProcessing()=0;
};
//创建具体的业务服务实体类EJBService
class EJBService :public BussinessService
{
public:
EJBService() {};
~EJBService() {};
void doProcessing();
};
void EJBService::doProcessing()
{
cout << "EJBService class doProcessing" << endl;
}
//创建具体的业务服务实体类JMSSerice
class JMSSerice :public BussinessService
{
public:
JMSSerice() {};
~JMSSerice() {};
void doProcessing();
};
void JMSSerice::doProcessing()
{
cout << "JMSSerice class doProcessing" << endl;
}
//创建一个查询服务类BusinessLookUp 查询相关服务对象,提供业务对象对服务对象的访问
class BusinessLookUp
{
public:
BusinessLookUp() {};
~BusinessLookUp() {};
BussinessService *getBusinessService(string serviceType);
};
BussinessService *BusinessLookUp::getBusinessService(string serviceType)
{
if ("EJB" == serviceType)
{
return new EJBService();
}
else if ("JMS" == serviceType)
{
return new JMSSerice();
}
}
//创建一个业务代表BusinessDelegate类,提供了对业务服务方法的访问
class BusinessDelegate
{
public:
BusinessDelegate();
~BusinessDelegate();
void setServiceType(string serviceType);
void doTask();
private:
string serviceType;
BusinessLookUp *lookupService;
BussinessService *tbusinessService;
};
BusinessDelegate::BusinessDelegate()
{
lookupService = new BusinessLookUp();
}
BusinessDelegate::~BusinessDelegate()
{
delete lookupService;
lookupService = NULL;
}
void BusinessDelegate::setServiceType(string serviceType)
{
this->serviceType = serviceType;
}
void BusinessDelegate::doTask()
{
tbusinessService = lookupService->getBusinessService(serviceType);
tbusinessService->doProcessing();
}
//创建一个客户端类client
class client
{
public:
client(BusinessDelegate *tbusinessService);
~client();
void doTask();
private:
BusinessDelegate *mbusinessService;
};
client::client(BusinessDelegate *tbusinessService)
{
this->mbusinessService = tbusinessService;
}
client::~client()
{
}
void client::doTask()
{
this->mbusinessService->doTask();
}
int main()
{
BusinessDelegate *businessdelegate = new BusinessDelegate();
businessdelegate->setServiceType("EJB");
client *mclient = new client(businessdelegate);
mclient->doTask();
businessdelegate->setServiceType("JMS");
mclient->doTask();
delete businessdelegate;
businessdelegate = NULL;
delete mclient;
mclient = NULL;
system("pause");
return 0;
}
在visual studio 2015上运行结果: