在這里輸入文本

假設我們有一個人去捕獵,他抓到不同的獵物,獵物都會發出叫聲。
所以存在兩個抽象體: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;
}