桥接模式(Bridge Pattern)是一种结构型设计模式,它用于将抽象部分和具体实现部分分离,使他们可以独立变化。这种设计模式的主要目的是把抽象化与实现化解耦,使得二者可以独立变化。桥接模式优先通过组合方式来实现两个类的联系,而不是继承4
在HuntBird游戏中,需要模拟不同鸟的多种行为,鸟类中提供了对其各种行为信息进行显示的show()方法,目前游戏需要呈现的是鸽子和企鹅、老鹰的飞和游泳行为,现使用桥接模式设计该游戏
#include <iostream>
using namespace std;
// 飞行接口
class FlyBehavior {
public:
virtual void fly() = 0;
};
// 游泳接口
class SwimBehavior {
public:
virtual void swim() = 0;
};
class Canfly :public FlyBehavior {
public:
void fly() override {
cout << "能飞" << endl;
}
};
class Notfly :public FlyBehavior {
public:
void fly() override {
cout << "不能飞" << endl;
}
};
class Canswim :public SwimBehavior {
public:
void swim()override {
cout << "能游泳" << endl;
}
};
class Notswim :public SwimBehavior {
public:
void swim()override {
cout << "不能游泳" << endl;
}
};
// 鸟类
class Bird {
protected:
FlyBehavior* flyBehavior;
SwimBehavior* swimBehavior;
public:
Bird(FlyBehavior* fb, SwimBehavior* sb) : flyBehavior(fb), swimBehavior(sb) {}
virtual void show() = 0;
};
// 鸽子类
class Dove : public Bird {
public:
Dove(FlyBehavior* fb, SwimBehavior* sb) : Bird(fb, sb) {}
void show() override {
flyBehavior->fly();
swimBehavior->swim();
}
};
// 企鹅类
class Penguin : public Bird {
public:
Penguin(FlyBehavior* fb, SwimBehavior* sb) : Bird(fb, sb) {}
void show() override {
flyBehavior->fly();
swimBehavior->swim();
}
};
//老鹰类
class Laoyin : public Bird {
public:
Laoyin(FlyBehavior* fb, SwimBehavior* sb) : Bird(fb, sb) {}
void show() override {
flyBehavior->fly();
swimBehavior->swim();
}
};
int main() {
int k = 0;
while (1) {
cout << "请输入你要测试的鸟儿:1代表鸽子,2代表老鹰,3代表企鹅" << endl;
cin >> k;
if (k == 1) {
// 创建鸽子的飞行和游泳行为
FlyBehavior* doveFly = new Canfly();
SwimBehavior* doveSwim = new Notswim();
// 创建鸽子
Bird* dove = new Dove(doveFly, doveSwim);
dove->show();
// 删除创建的对象
delete dove;
delete doveFly;
delete doveSwim;
}
else if (k == 2) {
// 创建老鹰的飞行和游泳行为
FlyBehavior* laoyinFly = new Canfly();
SwimBehavior* laoyinSwim = new Notswim();
// 创建老鹰
Bird* laoyin = new Penguin(laoyinFly, laoyinSwim);
laoyin->show();
// 删除创建的对象
delete laoyin;
delete laoyinFly;
delete laoyinSwim;
}
else if (k==3) {
// 创建企鹅的飞行和游泳行为
FlyBehavior* penguinFly = new Notfly();
SwimBehavior* penguinSwim = new Canswim();
// 创建企鹅
Bird* penguin = new Penguin(penguinFly, penguinSwim);
penguin->show();
// 删除创建的对象
delete penguin;
delete penguinFly;
delete penguinSwim;
}
}
return 0;
}
1.Canfly、Notfly、Canswim和Notswim是实现部分。Bird是抽象类,Dove、Penguin和Laoyin是具体类。
2.每个具体类都有一个FlyBehavior和SwimBehavior的实例,这样就实现了抽象部分和实现部分的解耦,使得它们可以独立地变化。
3.例如,我们可以通过改变FlyBehavior或SwimBehavior的实例来改变鸟的飞行或游泳的行为,而不需要修改Bird类或具体的鸟类
提高了代码的可扩展性和可维护性。桥接模式可以将一个大类或系统分解为两个独立的层次结构,使得这两个层次结构可以独立地扩展和修改,从而提高了代码的可扩展性和可维护性3。
减少了类的数量。桥接模式可以避免在两个层次结构之间创建大量的子类,从而减少了类的数量,使得代码更加简洁
提高了类的可复用性。桥接模式可以使得抽象部分和实现部分可以独立地复用,从而提高了类的可复用性
提高了系统的灵活性。桥接模式可以使得抽象部分和实现部分可以独立地变化,从而提高了系统的灵活性
增加了系统的复杂性。桥接模式可能会导致系统的复杂性增加,因为它需要在抽象层和实现层之间建立一个桥接类,这可能会使得系统变得更加复杂
可能会降低代码的可读性。由于桥接模式需要在抽象层和实现层之间建立一个桥接类,因此可能会使得代码变得更加难以理解和维护
可能会对程序的性能产生负面影响。如果需要创建大量的对象,桥接模式可能会对程序的性能产生负面影响
##最后是代码的运行展示和项目类视图
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。