作者:billy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
业务代表模式
业务代表模式(Business Delegate Pattern)用于对表示层和业务层解耦,用来减少通信或对表示层代码中的业务层代码的远程查询功能。在业务层中我们有以下实体。
- 客户端(Client) - 表示层代码可以是 JSP、servlet 或 UI java 代码。
- 业务代表(Business Delegate) - 一个为客户端实体提供的入口类,它提供了对业务服务方法的访问。
- 查询服务(LookUp Service) - 查找服务对象负责获取相关的业务实现,并提供业务对象对业务代表对象的访问。
- 业务服务(Business Service) - 业务服务接口。实现了该业务服务的实体类,提供了实际的业务实现逻辑。
UML结构图
代码实现
interface.h
创建抽象类 - 服务;创建实体类 - EJB服务、JMS服务
#include <string>
#include <iostream>
using namespace std;
class BusinessService //基类-服务
{
public:
BusinessService() {}
virtual ~BusinessService() {}
virtual void doProcessing() = 0;
};
class EJBService: public BusinessService //子类-EJB服务
{
public:
void doProcessing() { cout << "Processing task by invoking EJB Service" << endl; }
};
class JMSService: public BusinessService //子类-JMS服务
{
public:
void doProcessing() { cout << "Processing task by invoking JMS Service" << endl; }
};
businesslookup.h
创建业务查询服务,这里用到了工厂模式,根据选择的类型创建相应的产品
#include "interface.h"
class BusinessLookUp
{
public:
BusinessService * getBusinessService(string serviceType)
{
if(serviceType == "EJB")
{
return new EJBService();
}
else if(serviceType == "JMS")
{
return new JMSService();
}
else
{
return nullptr;
}
}
};
businessdelegate.h
创建业务代表
#include "businesslookup.h"
class BusinessDelegate
{
public:
BusinessDelegate()
{
lookupService = new BusinessLookUp();
businessService = nullptr;
}
void setServiceType(string serviceType)
{
this->serviceType = serviceType;
}
void doTask()
{
businessService = lookupService->getBusinessService(serviceType);
businessService->doProcessing();
}
private:
BusinessLookUp *lookupService;
BusinessService *businessService;
string serviceType;
};
client.h
创建客户端
#include "businessdelegate.h"
class Client
{
public:
Client(BusinessDelegate *businessService): businessService(businessService) {}
void doTask()
{
businessService->doTask();
}
private:
BusinessDelegate *businessService;
};
main.cpp
实例应用 - 使用 BusinessDelegate 和 Client 类来演示业务代表模式
#include "client.h"
int main()
{
BusinessDelegate *businessDelegate = new BusinessDelegate();
businessDelegate->setServiceType("EJB");
Client *client = new Client(businessDelegate);
client->doTask();
businessDelegate->setServiceType("JMS");
client->doTask();
return 0;
}
运行结果:
Processing task by invoking EJB Service
Processing task by invoking JMS Service