
在這里輸入文本
假設(shè)我們有一個(gè)人去捕獵,他抓到不同的獵物,獵物都會(huì)發(fā)出叫聲。
所以存在兩個(gè)抽象體:1.動(dòng)物,2.人。
人分不同的種類(lèi)的人,雖然不同的人抓到同一個(gè)獵物可能效果不同,但是為了簡(jiǎn)化設(shè)計(jì)思想,所以我們?cè)谶@里只簡(jiǎn)單的說(shuō)動(dòng)物的叫聲。
不同的動(dòng)物會(huì)叫出不同的聲音。
//filename bridge.h
//將抽象部分與它的實(shí)現(xiàn)部分分離,使它們都可以獨(dú)立地變化。
#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; //必須實(shí)現(xiàn)
virtual ~Man() = 0 ;
};
inline Man::~Man(){}
class Hunter : public Man{
public:
virtual void catchAnimal(Animal *animal){
animal->shut();
}
virtual ~Hunter(){};
};
測(cè)試用例:
#include "bridge.h"
int main(){
Man *mark = new Hunter; //可以是別的人類(lèi),這里分離一個(gè)實(shí)現(xiàn)
Animal *aCat = new Cat; //可以是別的人類(lèi),這里分離一個(gè)實(shí)現(xiàn)
mark->catchAnimal(aCat);
delete aCat;
delete mark;
return 0;
}