C++设计模式:业务代表模式

业务代表模式

业务代表模式(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

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值