C++设计模式编程中使用Bridge桥接模式的完全攻略

  #ifndef _ABSTRACTION_H_

  #define _ABSTRACTION_H_

  class AbstractionImplement;

  class Abstraction

  {

  public:

  virtual void Operation()=0;//定义接口,表示该类所支持的操作

  virtual ~Abstraction();

  protected:

  Abstraction();

  };

  class RefinedAbstractionA:public Abstraction

  {

  public:

  RefinedAbstractionA(AbstractionImplement* imp);//构造函数

  virtual void Operation();//实现接口

  virtual ~RefinedAbstractionA();//析构函数

  private:

  AbstractionImplement* _imp;//私有成员

  };

  class RefinedAbstractionB:public Abstraction

  {

  public:

  RefinedAbstractionB(AbstractionImplement* imp);//构造函数

  virtual void Operation();//实现接口

  virtual ~RefinedAbstractionB();//析构函数

  private:

  AbstractionImplement* _imp;//私有成员

  };

  #endif

  Abstraction.cpp

  #include "Abstraction.h"

  #include "AbstractionImplement.h"

  #include

  using namespace std;

  Abstraction::Abstraction()

  {}

  Abstraction::~Abstraction()

  {}

  RefinedAbstractionA::RefinedAbstractionA(AbstractionImplement* imp)

  {

  this->_imp = imp;

  }

  RefinedAbstractionA::~RefinedAbstractionA()

  {

  delete this->_imp;

  this->_imp = NULL;

  }

  void RefinedAbstractionA::Operation()

  {

  cout << "RefinedAbstractionA::Operation" << endl;

  this->_imp->Operation();

  }

  RefinedAbstractionB::RefinedAbstractionB(AbstractionImplement* imp)

  {

  this->_imp = imp;

  }

  RefinedAbstractionB::~RefinedAbstractionB()

  {

  delete this->_imp;

  this->_imp = NULL;

  }

  void RefinedAbstractionB::Operation()

  {

  cout << "RefinedAbstractionB::Operation" << endl;

  this->_imp->Operation();

  }

  AbstractImplement.h

  #ifndef _ABSTRACTIONIMPLEMENT_H_

  #define _ABSTRACTIONIMPLEMENT_H_

  //抽象基类,定义了实现的接口

  class AbstractionImplement

  {

  public:

  virtual void Operation()=0;//定义操作接口

  virtual ~AbstractionImplement();

  protected:

  AbstractionImplement();

  };

  // 继承自AbstractionImplement,是AbstractionImplement的不同实现之一

  class ConcreteAbstractionImplementA:public AbstractionImplement

  {

  public:

  ConcreteAbstractionImplementA();

  void Operation();//实现操作

  ~ConcreteAbstractionImplementA();

  protected:

  };

  // 继承自AbstractionImplement,是AbstractionImplement的不同实现之一

  class ConcreteAbstractionImplementB:public AbstractionImplement

  {

  public:

  ConcreteAbstractionImplementB();

  void Operation();//实现操作

  ~ConcreteAbstractionImplementB();

  protected:

  };

  #endif

  AbstractImplement.cpp

  #include "AbstractionImplement.h"

  #include

  using namespace std;

  AbstractionImplement::AbstractionImplement()

  {}

  AbstractionImplement::~AbstractionImplement()

  {}

  ConcreteAbstractionImplementA::ConcreteAbstractionImplementA()

  {}

  ConcreteAbstractionImplementA::~ConcreteAbstractionImplementA()

  {}

  void ConcreteAbstractionImplementA::Operation()

  {

  cout << "ConcreteAbstractionImplementA Operation" << endl;

  }

  ConcreteAbstractionImplementB::ConcreteAbstractionImplementB()

  {}

  ConcreteAbstractionImplementB::~ConcreteAbstractionImplementB()

  {}

  void ConcreteAbstractionImplementB::Operation()

  {

  cout << "ConcreteAbstractionImplementB Operation" << endl;

  }