首页 > 编程语言 >桥接模式(C++)

桥接模式(C++)

时间:2024-05-07 14:33:25浏览次数:19  
标签:桥接 模式 int C++ new Circle 100 DrawAPI

桥接模式:主要应用于需求复杂,不确定的场景,用于解耦

#include <iostream>
using namespace std;

// Implementor
class DrawAPI
{
public:
    virtual void drawCircle(int radius, int x, int y) = 0;
    virtual ~DrawAPI() {}
};

// ConcreteImplementorA
class RedCircle : public DrawAPI
{
public:
    void drawCircle(int radius, int x, int y) override
    {
        cout << "Drawing Circle[ color: red, radius: " << radius << ", x: " << x << ", y: " << y << " ]" << endl;
    }
};

// ConcreteImplementorB
class GreenCircle : public DrawAPI
{
public:
    void drawCircle(int radius, int x, int y) override
    {
        cout << "Drawing Circle[ color: green, radius: " << radius << ", x: " << x << ", y: " << y << " ]" << endl;
    }
};

// Abstraction
class Shape
{
protected:
    DrawAPI *drawAPI;
    Shape(DrawAPI *drawAPI) : drawAPI(drawAPI) {}
public:
    virtual void draw() = 0;
    virtual ~Shape() {}
};

// RefinedAbstraction
class Circle : public Shape
{
private:
    int x, y, radius;
public:
    Circle(int x, int y, int radius, DrawAPI *drawAPI) : Shape(drawAPI), x(x), y(y), radius(radius) {}
    void draw() override
    {
        drawAPI->drawCircle(radius, x, y);
    }
};

// Client code
int main()
{
    Shape *redCircle = new Circle(100, 100, 10, new RedCircle());
    Shape *greenCircle = new Circle(100, 100, 10, new GreenCircle());

    redCircle->draw();
    greenCircle->draw();

    delete redCircle;
    delete greenCircle;

    return 0;
}

在这个例子中,DrawAPI 是实现类接口,RedCircle 和 GreenCircle 是具体的实现类。Shape 是抽象类,而 Circle 是扩展抽象类。通过这种方式,Circle 类的实现可以独立于画圆的颜色,从而实现了代码的解耦

标签:桥接,模式,int,C++,new,Circle,100,DrawAPI
From: https://www.cnblogs.com/FlyingDoG--BoxPiG/p/18177166

相关文章

  • openGauss 导出模式
    导出模式openGauss目前支持使用gs_dump工具导出模式级的内容,包含模式的数据和定义。用户可通过灵活的自定义方式导出模式内容,不仅支持选定一个模式或多个模式的导出,还支持排除一个模式或者多个模式的导出。可根据需要自定义导出如下信息:导出模式全量信息,包含数据和对象定义。......
  • C#/C++ 通过ODBC连接OceanBase Oracle租户
    概述近期我们项目正处于将Oracle数据库迁移到OceanBaseOracle租户模式的阶段。考虑到我们项目采用了C++和C#混合开发,并且使用了多种技术,因此存在多种数据库连接方式。然而,针对C#连接OceanBase的案例相对较少,因此我特意记录下这一过程。开放数据库互连(ODBC)是微软公司开放服务结......
  • C++U7-4-树及其应用(一)
    堆及其应用(一) 预先掌握 堆的定义堆:是一种特殊的树形数据结构,通常指的是二叉堆,可以被看作一棵完全二叉树。堆的特点是每个节点的值都大于等于(对于最大堆)或小于等于(对于最小堆)其子节点的值。堆的根节点包含最大值(最大堆)或最小值(最小堆)。用途:堆:主要用于实现优先队列,支持高......
  • C++U7-3-树及其应用
    树及其应用 树的表示方法       讲解哈夫曼树的基本概念            哈夫曼树的构造    哈夫曼编码的基本概念                作业讲解:链接:https://pan......
  • 【设计模式】策略模式
    一、介绍策略模式是一种行为设计模式,它能让你定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。这里列举两个例子来说明下策略模式的使用场景:(1)根据会员等级来计算折扣力度。不同等级拥有不同的折扣力度,这样就可以根据策略模式去灵活的计算,就算之后又......
  • 深入探究C++ 类成员(Class Members)
    一、定义在class的声明里头,真正有用的两样东西是datamembers和memberfunctions:Datamembers:表示根据这个class所产生的object里头会有些什么东西,它事实上也是占据object内存的唯一东西(除非引入虚拟机制)。通常为数据的封装性,我们把datamembers声明为private或protec......
  • C++面试笔记 - (二)
    1、C++从代码到可执行二进制文件的过程C++和C语言类似,一个C++程序从源码到执行文件,有四个过程,预编译、编译、汇编、链接。预编译:这个过程主要的处理操作如下:将所有的#define删除,并且展开所有的宏定义处理所有的条件预编译指令,如#if、#ifdef处理#include预编译指令,将被包含的......
  • C++面试总结(一)--c与c++不同
    C++面试总结(一)--C与C++不同c++特点C++在C语言基础上引入了面对对象的机制,同时也兼容C语言。C++有三大特性(1)封装。(2)继承。(3)多态;C++语言编写出的程序结构清晰、易于扩充,程序可读性好。C++生成的代码质量高,效率高,C++更加安全,增加了const常量、引用、四类cast转换(stat......
  • c++中文编码问题
    std::string或者constchar*,本质上都是二进制,不包含编码属性,其编码信息来源于赋值语句,QString以utf16编码,默认构造或赋值的字面量假定为utf8,若是其它编码比如ansi,可以调用QString::fromLocal8bit一、字面量的编码取决于文件,即如果在c++源文件中有直接赋值1)、constchar*s="......
  • 22. 括号生成-c++
    数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。示例1:输入:n=3输出:["((()))","(()())","(())()","()(())","()()()"]示例2:输入:n=1输出:["()"]classSolution{public:vector<string>generat......