C++设计模式——桥接模式(高屋建瓴)

原网址:https://blog.csdn.net/mrailence/article/details/53103284

#include 
using namespace std;
class AbstractionImlement {
 public:
  AbstractionImlement() {}
  virtual ~AbstractionImlement() {}
  virtual void Operation() = 0;
};
class ConcreteAbstractionImplemetA:public AbstractionImlement {
 public:
  ConcreteAbstractionImplemetA() {}
  ~ConcreteAbstractionImplemetA() {}
  void Operation() {
    cout << "TongXunLu Operation" << endl;
  }
};

class ConcreteAbstractionImplemetB:public AbstractionImlement {
 public:
  ConcreteAbstractionImplemetB() {}
  ~ConcreteAbstractionImplemetB() {}
  void Operation() {
    cout << "RuanJian  Operation" << endl;
  }
}; 

class Abstraction {
 public:
  Abstraction() {}
  virtual ~Abstraction() {}
  virtual  void Operation() = 0;
};

class RefinedAbstrctionA : public Abstraction {
 public:
  RefinedAbstrctionA(AbstractionImlement *Imp):m_Imp(Imp) {}
  ~RefinedAbstrctionA() {}
  void Operation() {
    cout << "ShouJiPingPaiA::Operation" << endl;
    m_Imp->Operation();
  }
 private:
  AbstractionImlement* m_Imp;
};

class RefinedAbstrctionB : public Abstraction {
 public:
  RefinedAbstrctionB(AbstractionImlement *Imp):m_Imp(Imp) {}
  ~RefinedAbstrctionB() {}
  void Operation() {
    cout << "ShouJiPingPaiB::Operation" << endl;
    m_Imp->Operation();
  }
 private:
  AbstractionImlement* m_Imp;
};

int main(){
  AbstractionImlement* imp = new ConcreteAbstractionImplemetA();
  Abstraction* abs = new RefinedAbstrctionA(imp);
  abs->Operation();
  cout << "-------------------" << endl;
  AbstractionImlement* imp1 = new ConcreteAbstractionImplemetB();
  Abstraction* abs1 = new RefinedAbstrctionA(imp1);
  abs1->Operation();
  cout << "-------------------" << endl;
  AbstractionImlement* imp2 = new ConcreteAbstractionImplemetA();
  Abstraction* abs2 = new RefinedAbstrctionB(imp2);
  abs2->Operation();
  cout << "----------------------" << endl;
  AbstractionImlement* imp3 = new ConcreteAbstractionImplemetB(); 
  Abstraction* abs3 = new RefinedAbstrctionB(imp3);
  abs3->Operation();
  return 0;
}
输出结果:
ShouJiPingPaiA::Operation
TongXunLu Operation
-------------------
ShouJiPingPaiA::Operation
RuanJian  Operation
-------------------
ShouJiPingPaiB::Operation
TongXunLu Operation
----------------------
ShouJiPingPaiB::Operation
RuanJian  Operation

你可能感兴趣的:(C++设计模式,c++,设计模式)