前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++设计模式—桥接模式讲解以HuntBird游戏为例

c++设计模式—桥接模式讲解以HuntBird游戏为例

原创
作者头像
晨星成焰
修改2024-04-02 18:35:48
2461
修改2024-04-02 18:35:48
举报

桥接模式简介

桥接模式(Bridge Pattern)是一种结构型设计模式,它用于将抽象部分和具体实现部分分离,使他们可以独立变化。这种设计模式的主要目的是把抽象化与实现化解耦,使得二者可以独立变化。桥接模式优先通过组合方式来实现两个类的联系,而不是继承4

以简单的HuntBird游戏为例介绍桥接模式

在HuntBird游戏中,需要模拟不同鸟的多种行为,鸟类中提供了对其各种行为信息进行显示的show()方法,目前游戏需要呈现的是鸽子和企鹅、老鹰的飞和游泳行为,现使用桥接模式设计该游戏

首先用startuml画一个简单的类图

HuntBird类图
HuntBird类图

再根据类图实现代码

代码语言:cpp
复制
#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。

减少了类的数量。桥接模式可以避免在两个层次结构之间创建大量的子类,从而减少了类的数量,使得代码更加简洁

提高了类的可复用性。桥接模式可以使得抽象部分和实现部分可以独立地复用,从而提高了类的可复用性

提高了系统的灵活性。桥接模式可以使得抽象部分和实现部分可以独立地变化,从而提高了系统的灵活性

桥接模式的缺点包括:

增加了系统的复杂性。桥接模式可能会导致系统的复杂性增加,因为它需要在抽象层和实现层之间建立一个桥接类,这可能会使得系统变得更加复杂

可能会降低代码的可读性。由于桥接模式需要在抽象层和实现层之间建立一个桥接类,因此可能会使得代码变得更加难以理解和维护

可能会对程序的性能产生负面影响。如果需要创建大量的对象,桥接模式可能会对程序的性能产生负面影响

##最后是代码的运行展示和项目类视图

运行展示
运行展示
项目类视图
项目类视图

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 桥接模式简介
  • 以简单的HuntBird游戏为例介绍桥接模式
    • 首先用startuml画一个简单的类图
      • 再根据类图实现代码
        • 代码解析:
          • 桥接模式的优缺点总结
            • 桥接模式的优点包括:
            • 桥接模式的缺点包括:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com