在这里输入文本

假设我们有一个人去捕猎,他抓到不同的猎物,猎物都会发出叫声。
所以存在两个抽象体: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;
}