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