在这里输入文本

假设我们有一个人去捕猎,他抓到不同的猎物,猎物都会发出叫声。
所以存在两个抽象体:1.动物,2.人。
人分不同的种类的人,虽然不同的人抓到同一个猎物可能效果不同,但是为了简化设计思想,所以我们在这里只简单的说动物的叫声。
不同的动物会叫出不同的声音。
// filename bridge.h
// 将抽象部分与它的实现部分分离,使它们都可以独立地变化。
#include <iostream>

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

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

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

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

inline Man::~Man(){}


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;
}