C++dll使用桥接模式提供接口

C++中的接口:
C++中的接口一般设计为不包含成员变量的抽象类,这样就只有接口的功能。
接口设计尽量不要涉及到成员变量,接口与实现要尽可能的分离,实现部分改变,不需要重现编译!

代码如下:`

class PERSONDLL_EXPORT PersonApi
{

public:
    static PersonApi*   CreatePersonApi();
    static void DeletePersonApi(PersonApi** ppAPi);

    virtual void SetAge(int nAGe) = 0;
    virtual void SetName(char* chName) = 0;
    virtual int GetAge() = 0;
    virtual char* GetName() = 0;
    virtual void  DoWork() = 0;
};

上面是接口部分,实现部分,采取桥接模式,提供一个IMPL类与接口类有一模一样的方法

通常的做法是另外定义一个新的类,其接口和原来的类一致,但是其数据全部隐藏在新的类中。例如我们定义A类,然后定义一个新类B和其有相同的接口,其数据成员都在新类中。引用A类的代码就不需要重新编译。

PersonApiImpl.h文件

class PersonImplApi : public PersonApi 
{
public:
    PersonImplApi();
    virtual ~PersonImplApi();

    virtual void SetAge(int nAGe);
    virtual void SetName(char* chName);
    virtual int GetAge();
    virtual char* GetName();
    virtual void  DoWork();


private:
    int  m_nAge;
    std::string m_strName;
};

PersonApiImpl.cpp文件

#include "stdafx.h"
#include "PersonImplApi.h"


PersonImplApi::PersonImplApi()
{
}


PersonImplApi::~PersonImplApi()
{
}

PersonApi*   PersonApi::CreatePersonApi()
{
    return new PersonImplApi();
}

void PersonApi::DeletePersonApi(PersonApi** ppAPi)
{
    if (NULL == ppAPi)
    {
        return;
    }

    PersonImplApi *pImpl = (PersonImplApi *)*ppAPi;
    delete pImpl;
    *ppAPi = NULL;
    return;
}

void PersonImplApi::SetAge(int nAGe)
{
    m_nAge = nAGe;
}

void PersonImplApi::SetName(char * chName)
{
    m_strName = chName;
}

int PersonImplApi::GetAge()
{
    return m_nAge;
}

char * PersonImplApi::GetName()
{
    return (char*)m_strName.c_str();
}

void PersonImplApi::DoWork()
{
    printf("system start work!\n");
}

在使用的时候 首先调用PersonApi::CreatePersonApi(); 返回一个 PersonImplApi指针,具体的接口调用使用该指针就可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值