設計模式之bridge模式

 bridge模式主要用於將抽象和行爲進行解耦,使兩者可以獨立變化。
主要應用在以下場合:
- 存在相對並列的子類屬性。
- 存在概念上的交叉。
- 可變性。
如果不使用bridge模式,抽象和行爲的多種組合將導致子類爆炸問題。使用bridege模式,我們
設計兩個接口:抽象接口和行爲接口,在抽象接口裏面保存行爲接口的指針,通過設置不同的
行爲實現類,使對象程序不同行爲。
代碼:
// 維護一個Implementor類的指針
class Abstraction
{
public:
Abstraction(Implementor* pImplementor);
virtual ~Abstraction();

void Operation();

protected:
Implementor* m_pImplementor;
};

// 爲實現Abstraction定義的抽象基類,定義了實現的接口函數
class Implementor
{
public:
Implementor(){}
virtual ~Implementor(){}

virtual void OperationImpl() = 0;
};
------------------------------------------------------------------------------
// 繼承自Implementor,是Implementor的不同實現之一
class ConcreateImplementorA
: public Implementor
{
public:
ConcreateImplementorA(){}
virtual ~ConcreateImplementorA(){}

virtual void OperationImpl();
};

// 繼承自Implementor,是Implementor的不同實現之一
class ConcreateImplementorB
: public Implementor
{
public:
ConcreateImplementorB(){}
virtual ~ConcreateImplementorB(){}

virtual void OperationImpl();
};
void ConcreateImplementorA::OperationImpl()
{
std::cout << "Implementation by ConcreateImplementorA\n";
}

void ConcreateImplementorB::OperationImpl()
{
std::cout << "Implementation by ConcreateImplementorB\n";
}

Abstraction::Abstraction(Implementor* pImplementor)
: m_pImplementor(pImplementor)
{
}

Abstraction::~Abstraction()
{
delete m_pImplementor;
m_pImplementor = NULL;
}

void Abstraction::Operation()
{
m_pImplementor->OperationImpl();
}
----------------------------------------------------------------------
client調用:
        ConcreateImplementorA *pImplA = new ConcreateImplementorA();
Abstraction *pAbstraction1 = new Abstraction(pImplA);
pAbstraction1->Operation();

ConcreateImplementorB *pImplB = new ConcreateImplementorB();
Abstraction *pAbstraction2 = new Abstraction(pImplB);
pAbstraction2->Operation();
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章