Bridge模式

一 Bridge模式典型的结构图为:


图2-1:Bridge Pattern结构图

二 在Bridge模式的结构图中可以看到,系统被分为两个相对独立的部分,左边是抽象部
分,右边是实现部分,这两个部分可以互相独立地进行修改:例如上面问题中的客户需求
变化,当用户需求需要从Abstraction派生一个具体子类时候,并不需要像上面通过继承
方式实现时候需要添加子类A1和A2了。另外当上面问题中由于算法添加也只用改变右
边实现(添加一个具体化子类),而右边不用在变化,也不用添加具体子类了

 

#include  < iostream >

class  AbstractionImp;

/* ****************************************************************** */
///  ClassName:Abstraction
///  Description:抽象部分基类
class  Abstraction
{
public :
    
virtual   ~ Abstraction(){}

    
virtual   void  Operation()  =   0 ;

protected :
    Abstraction(){}
};

/* ****************************************************************** */
///  ClassName:RefinedAbstraction
///  Description:抽象部分实现
class  RefinedAbstraction :  public  Abstraction
{
public :
    RefinedAbstraction(AbstractionImp 
* imp) : m_pImp(imp){}
    
virtual   ~ RefinedAbstraction(){ m_pImp  =  NULL; }

public :
    
virtual   void  Operation();

protected :
    AbstractionImp 
*  m_pImp;
};

/* ****************************************************************** */
///  ClassName:AbstractionImp
///  Description:实现基类
class  AbstractionImp
{
public :
    
virtual   ~ AbstractionImp(){}

    
virtual   void  Operation()  =   0 ;

protected :
    AbstractionImp(){}
};

/* ****************************************************************** */
///  ClassName:ConcreteAbstractionImpA
///  Description:具体实现类
class  ConcreteAbstractionImpA :  public  AbstractionImp
{
public :
    ConcreteAbstractionImpA(){}
    
virtual   ~ ConcreteAbstractionImpA(){}

public :
    
virtual   void  Operation()
    {
        std::cout 
<<   " ConcreteAbstractionImpA::Operation "   <<  std::endl;
    }
};

class  ConcreteAbstractionImpB :  public  AbstractionImp
{
public :
    ConcreteAbstractionImpB(){}
    
virtual   ~ ConcreteAbstractionImpB(){}

public :
    
virtual   void  Operation()
    {
        std::cout 
<<   " ConcreteAbstractionImpB::Operation "   <<  std::endl;
    }
};

void  RefinedAbstraction::Operation()
{
    m_pImp
-> Operation();
}

int  _tmain( int  argc, _TCHAR *  argv[])
{
    AbstractionImp 
* imp  =   new  ConcreteAbstractionImpA();
    Abstraction 
* abs  =   new  RefinedAbstraction(imp);
    abs
-> Operation();

    getchar();
    
return   0 ;
}

 

你可能感兴趣的:(bridge)