设计模式之Bridge

之前写博一直在csdn,但是上面的服务器时好时坏,发文会丢。发现这边园子还不错,因此转到这里来了。第一篇就介绍一下我对Bridge的理解。

UML工具使用Enterprise Architect, 工程使用VC2008编译通过。

先贴出类的关系:

设计模式之Bridge

class CProductA继承自class Bridge, 具备其属性pIfc, 该属性是指向CIfOperator(接口)的指针. C++不存在真正意义上的接口, 只是一个纯虚类;

                       具备GetImp()操作方法用以获得通过接口传过来的实例;

                       重写(覆盖,override)Attribute().

 

class Bridge聚合了接口CIfOperator.

class COperatorAclass COperatorB实现了接口, 并各自重写了Operator()方法, 使其各自具备自身特点。

这样,class CProductA和class COperatorA, class COperatorB等之间形成了Bridge.

每次给CProductA增加新的实现方法, 只需要新增加一个实现接口CIfOperator的实例并通过GetImp()传入给CProduceA,以此实现操作者和操作方法分离。

代码实现:

设计模式之BridgeView Code

//Bridge.h
#ifndef _BRIDGE_H__
#define _BRIDGE_H__

/*接口,抽象类实现*/
class CIfOperator
{
public:
virtual void Operator()=0;
};

/*抽象, 非抽象类*/
class CAbstract
{
protected:
//聚合操作接口的实例
CIfOperator* pIfc;
public:
/*非纯虚函数必须要定义,否则即使其子类也不能实例化成功*/
virtual void Attribute()
{
}
//获取操作接口的接口函数
CIfOperator* GetImp(CIfOperator* p);
};

//操作者
class CProductA:public CAbstract
{
public:
virtual void Attribute();
};

/*操作实现1*/
class COperatorA:public CIfOperator
{
/* public:*//*接口,可以不用public属性*/
virtual void Operator();
};

/*操作实现2*/
class COperatorB:public CIfOperator
{
/*public:*/
virtual void Operator();
};
#endif/*_BRIDGE_H__*/
设计模式之BridgeView Code

//Bridge.hcpp
#include "Bridge.h"

#include <stdio.h>

void CProductA::Attribute()
{
pIfc->Operator();
}

CIfOperator* CAbstract::GetImp(CIfOperator* p)
{
pIfc = p;
return p;
}


//具体方法实现
void COperatorA::Operator()
{
printf("COperatorA.Operatorn");
}

void COperatorB::Operator()
{
printf("COperatorB.Operatorn");
}
设计模式之BridgeView Code

    CProductA pA;
pA.GetImp(new COperatorA());
pA.Attribute();
pA.GetImp(new COperatorB());
pA.Attribute();

原文链接: https://www.cnblogs.com/RealOnlyme/archive/2012/03/14/2395579.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    设计模式之Bridge

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/44184

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月8日 下午8:50
下一篇 2023年2月8日 下午8:50

相关推荐