学习笔记:桥接模式
模式简介
:属于结构型模式,用于抽象化与实现化的解耦,使得二者可以独立变化
为什么用
:一个类有很多子类,子类有不同的实现,但是不同的实现可以独立出来,写出来更灵活
怎么样用
:对不同的实现写一个总的接口,让父类调用它的接口,
这样在实例化的子类中就能直接调用不同的实现接口的方法。
注意事项
:学习抽象的编程。
实际举例
:生成带有不同掉落buff的不同级别怪物。
#include <iostream>
using namespace std;
//怪物掉落buff的变化
class DropBuff {
public:
virtual void add(string &name) {
cout << "待实现的方法\n";
}
};
//偏向金钱
class DropBuff_Money :public DropBuff {
public:
void add(string &name) {
name += "\nbuff:击杀掉落大量金钱\n\n";
}
};
//偏向经验
class DropBuff_Experience :public DropBuff {
public:
void add(string &name) {
name += "\nbuff:击杀掉落大量经验\n\n";
}
};
//怪物级别的变化
class Monster {
protected:
DropBuff* dropBuff;
public:
virtual void build(string name) {
cout << "待实现的方法\n";
}
};
//大怪
class Boss :public Monster {
public:
Boss(DropBuff* dropBuff) {
this->dropBuff = dropBuff;
}
void build(string name) {
name = "Boss: " + name;//相当于提供Boss模板
dropBuff->add(name);//相当于附加掉落buff
cout << name;
}
};
//小怪
class Critters :public Monster {
public:
Critters(DropBuff* dropBuff) {
this->dropBuff = dropBuff;
}
void build(string name) {
name = "Critters: " + name;
dropBuff->add(name);
cout << name;
}
};
int main()
{
//抽象和实现两个维度变化
//不同级别的怪物,不同的掉落buff
//Boss MoreMoney
Monster* boss_money = new Boss(new DropBuff_Money());
boss_money->build("英雄");
//Critters MoreExperience
Monster* critters_experience = new Critters(new DropBuff_Experience());
critters_experience->build("红蓝buff");
//其他测试
Monster* boss_experience = new Boss(new DropBuff_Experience());
boss_experience->build("大龙");
Monster* critters_money = new Critters(new DropBuff_Money());
critters_money->build("小兵");
return 0;
}