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