【GOF95】在提出桥梁模式的时候指出,桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation) 脱耦 ,使得二者可以独立地变化"。

在这里输入文本

假设我们有一个人去捕猎,他抓到不同的猎物,猎物都会发出叫声。
所以存在两个抽象体:1.动物,2.人。
人分不同的种类的人,虽然不同的人抓到同一个猎物可能效果不同,但是为了简化设计思想,所以我们在这里只简单的说动物的叫声。
不同的动物会叫出不同的声音。

//filename bridge.h
//将抽象部分与它的实现部分分离,使它们都可以独立地变化。
#include <iostrem>

class Animal{
  public:
   virtual  void shut(){}
};

class Dog:  public Animal{
  public:
   void shut(){
    std::cout<< "wang! wang!" <<std::endl;
  }
};

class Cat:  public Animal{
  public:
   void shut(){
    std::cout<< "miao~! miao~" <<std::endl;
  }
};

class Man{
  public:
   virtual  void catchAnimal(Animal *ani) = 0;   // 必须实现
   virtual ~Man() = 0;
};


class Hunter :  public Man{
  public:
   virtual  void catchAnimal(Animal *animal){
    animal->shut();
  }
   virtual ~Hunter(){};
};

测试用例:
#include "bridge.h"

int main(){
  Man *mark =  new Hunter;
  Animal *aCat =  new Cat;

  mark->catchAnimal(aCat);

  delete aCat;
  delete mark;
   return 0;
}