![](https://i-blog.csdnimg.cn/blog_migrate/76a8ad4ddd623babce7188ff3d848989.jpeg)
在这里输入文本
假设我们有一个人去捕猎,他抓到不同的猎物,猎物都会发出叫声。
所以存在两个抽象体:1.动物,2.人。
人分不同的种类的人,虽然不同的人抓到同一个猎物可能效果不同,但是为了简化设计思想,所以我们在这里只简单的说动物的叫声。
不同的动物会叫出不同的声音。
//filename bridge.h
//将抽象部分与它的实现部分分离,使它们都可以独立地变化。
#include <iostrem>
class Animal{
public:
virtual void shut(){}
};
class Dog: public Animal{
public:
void shut(){
std::cout<< "wang! wang!" <<std::endl;
}
};
class Cat: public Animal{
public:
void shut(){
std::cout<< "miao~! miao~" <<std::endl;
}
};
class Man{
public:
virtual void catchAnimal(Animal *ani) = 0; // 必须实现
virtual ~Man() = 0;
};
class Hunter : public Man{
public:
virtual void catchAnimal(Animal *animal){
animal->shut();
}
virtual ~Hunter(){};
};
//将抽象部分与它的实现部分分离,使它们都可以独立地变化。
#include <iostrem>
class Animal{
public:
virtual void shut(){}
};
class Dog: public Animal{
public:
void shut(){
std::cout<< "wang! wang!" <<std::endl;
}
};
class Cat: public Animal{
public:
void shut(){
std::cout<< "miao~! miao~" <<std::endl;
}
};
class Man{
public:
virtual void catchAnimal(Animal *ani) = 0; // 必须实现
virtual ~Man() = 0;
};
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;
}
int main(){
Man *mark = new Hunter;
Animal *aCat = new Cat;
mark->catchAnimal(aCat);
delete aCat;
delete mark;
return 0;
}