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

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

#include <iostream>
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值