当前位置: 首页 > news >正文

汉中微信网站建设公司互联网公司排名100

汉中微信网站建设公司,互联网公司排名100,无为县住房建设局网站,上海公司注销咨询联贝财务C 桥接模式 (Bridge Pattern) flyfish 桥接模式是一种结构型设计模式#xff0c;旨在将抽象部分与它的实现部分分离#xff0c;使它们可以独立地变化。桥接模式可以使一个类的功能层次结构与实现层次结构分离。它通过引入一个中间接口#xff08;桥接接口#xff09;将具…C 桥接模式 (Bridge Pattern) flyfish 桥接模式是一种结构型设计模式旨在将抽象部分与它的实现部分分离使它们可以独立地变化。桥接模式可以使一个类的功能层次结构与实现层次结构分离。它通过引入一个中间接口桥接接口将具体的实现与抽象分离适用于需要跨多个不同维度来扩展的系统。最简单的说法就是通过一个桥梁来连接两个独立变化的部分使它们可以独立地变化和扩展。 看代码例子可以更清晰的理解桥接模式 (Bridge Pattern) 在以下情况下使用桥接模式 当不希望在抽象和实现之间有紧密的耦合使用桥接模式可以将抽象和实现分离使得它们可以独立变化。 当希望在运行时更改实现可以动态地选择不同的实现例如不同的绘图API或不同的通信协议。当希望一个类在多个维度上变化时使用桥接模式。当一个类有多个可能的实现方式并且这些实现方式可以动态切换时使用桥接模式。 当希望通过组合而不是继承来扩展类的功能桥接模式比传统的继承更灵活可以避免复杂的类层次结构。 桥接模式的 C 代码示例 绘制圆形并结合具体的绘图API来说明桥接模式的用法。 功能层次结构抽象部分 Shape抽象类定义了形状的接口包含一个指向DrawingAPI的引用。 CircleShape具体的形状类继承自Shape实现了具体的圆形绘制和调整大小的功能。 实现层次结构具体实现部分 DrawingAPI抽象接口类定义了绘制圆形的接口。 DrawingAPI01和DrawingAPI02具体实现类分别实现了不同的绘制圆形的方法。 #include iostream #include string #include vector// 抽象接口类绘图API定义绘制圆的接口 class DrawingAPI { public:virtual ~DrawingAPI() default;// 纯虚函数绘制圆形具体实现由子类提供virtual std::string DrawCircle(float x, float y, float radius) const 0; };// 具体实现类01使用API01绘制圆形 class DrawingAPI01 : public DrawingAPI { public:std::string DrawCircle(float x, float y, float radius) const override {return API01.circle at std::to_string(x) : std::to_string(y) - radius: std::to_string(radius);} };// 具体实现类02使用API02绘制圆形 class DrawingAPI02 : public DrawingAPI { public:std::string DrawCircle(float x, float y, float radius) const override {return API02.circle at std::to_string(x) : std::to_string(y) - radius: std::to_string(radius);} };// 抽象类形状包含一个指向绘图API的引用 class Shape { public:// 构造函数初始化绘图API引用Shape(const DrawingAPI drawing_api) : drawing_api_(drawing_api) {}virtual ~Shape() default;// 纯虚函数绘制形状由子类实现virtual std::string Draw() const 0;// 纯虚函数按百分比调整大小由子类实现virtual float ResizeByPercentage(const float percent) 0;protected:const DrawingAPI drawing_api_; // 绘图API引用 };// 具体实现类圆形 class CircleShape : public Shape { public:// 构造函数初始化圆形位置、半径和绘图APICircleShape(float x, float y, float radius, const DrawingAPI drawing_api): Shape(drawing_api), x_(x), y_(y), radius_(radius) {}// 绘制圆形调用绘图API的DrawCircle方法std::string Draw() const override {return drawing_api_.DrawCircle(x_, y_, radius_);}// 按百分比调整圆形的半径float ResizeByPercentage(const float percent) override {return radius_ * (1.0f percent / 100.0f);}private:float x_, y_, radius_; // 圆形的位置和半径 };int main(int argc, char** argv) {const DrawingAPI01 api1{}; // 创建绘图API01实例const DrawingAPI02 api2{}; // 创建绘图API02实例std::vectorCircleShape shapes {// 创建圆形实例使用不同的绘图APICircleShape{1.0f, 2.0f, 3.0f, api1},CircleShape{5.0f, 7.0f, 11.0f, api2}};// 调整圆形大小并绘制for (auto shape: shapes) {shape.ResizeByPercentage(2.5); // 调整半径std::cout shape.Draw() std::endl; // 绘制圆形}return 0; }桥接模式中的类在多个维度上的变化扩展形状的种类和绘图API的实现 形状的种类Shape 可以有不同的形状如圆形CircleShape、矩形RectangleShape等。这个维度代表了形状的多样性。 绘图API的实现DrawingAPI 可以有不同的绘图实现如DrawingAPI01、DrawingAPI02等。这个维度代表了绘图实现的多样性。 通过将这两个维度的变化分离可以独立地扩展形状的种类和绘图API的实现而不需要修改现有代码。这体现了桥接模式的灵活性。 代码中的多个维度变化的具体实现 1. 形状的变化 形状的变化体现在不同的Shape子类中 class Shape { public:Shape(const DrawingAPI drawing_api) : drawing_api_(drawing_api) {}virtual ~Shape() default;virtual std::string Draw() const 0;virtual float ResizeByPercentage(const float percent) 0;protected:const DrawingAPI drawing_api_; };class CircleShape : public Shape { public:CircleShape(float x, float y, float radius, const DrawingAPI drawing_api): Shape(drawing_api), x_(x), y_(y), radius_(radius) {}std::string Draw() const override {return drawing_api_.DrawCircle(x_, y_, radius_);}float ResizeByPercentage(const float percent) override {return radius_ * (1.0f percent / 100.0f);}private:float x_, y_, radius_; };可以进一步扩展形状类例如添加一个矩形类 class RectangleShape : public Shape { public:RectangleShape(float x, float y, float width, float height, const DrawingAPI drawing_api): Shape(drawing_api), x_(x), y_(y), width_(width), height_(height) {}std::string Draw() const override {return drawing_api_.DrawRectangle(x_, y_, width_, height_);}float ResizeByPercentage(const float percent) override {width_ * (1.0f percent / 100.0f);height_ * (1.0f percent / 100.0f);return width_ * height_;}private:float x_, y_, width_, height_; };2. 绘图API增加绘制矩阵的函数 绘图API的变化体现在不同的DrawingAPI实现类中 class DrawingAPI { public:virtual ~DrawingAPI() default;virtual std::string DrawCircle(float x, float y, float radius) const 0;virtual std::string DrawRectangle(float x, float y, float width, float height) const 0; };class DrawingAPI01 : public DrawingAPI { public:std::string DrawCircle(float x, float y, float radius) const override {return API01.circle at std::to_string(x) : std::to_string(y) - radius: std::to_string(radius);}std::string DrawRectangle(float x, float y, float width, float height) const override {return API01.rectangle at std::to_string(x) : std::to_string(y) - width: std::to_string(width) , height: std::to_string(height);} };class DrawingAPI02 : public DrawingAPI { public:std::string DrawCircle(float x, float y, float radius) const override {return API02.circle at std::to_string(x) : std::to_string(y) - radius: std::to_string(radius);}std::string DrawRectangle(float x, float y, float width, float height) const override {return API02.rectangle at std::to_string(x) : std::to_string(y) - width: std::to_string(width) , height: std::to_string(height);} };运行时选择不同的实现 在主程序中我们可以在运行时选择不同的绘图API实现并且可以独立地使用不同的形状对象 int main(int argc, char** argv) {const DrawingAPI01 api1{};const DrawingAPI02 api2{};std::vectorShape* shapes {new CircleShape{1.0f, 2.0f, 3.0f, api1},new RectangleShape{5.0f, 7.0f, 11.0f, 13.0f, api2}};for (auto shape : shapes) {shape-ResizeByPercentage(2.5);std::cout shape-Draw() std::endl;delete shape;}return 0; }在这个例子中CircleShape 和 RectangleShape 代表形状的多样性一个维度而 DrawingAPI01 和 DrawingAPI02 代表绘图API实现的多样性另一个维度。这样通过一个桥梁来连接两个独立变化的部分使它们可以独立地变化和扩展。
http://www.pierceye.com/news/445835/

相关文章:

  • 备案网站分布地点wordpress如何去掉amp:
  • 做一个小说阅读网站怎么做网站 没有备案 访问不了
  • 乐山乐人网站建设公司网站域名查主机名
  • 自适应网站的代表腰肌劳损的自我治疗和恢复的方法有什么?
  • 玉环城乡建设规划局网站企业网站源码带后台
  • 网站热点关键词免费可商用素材网站
  • 网站站内优化案例自己做的网页怎么上传网站吗
  • 深圳制作网站有用吗如何做网站优化
  • 皖住房建设厅网站the 7 wordpress
  • 怎么自己学着做网站写网站代码
  • 自己电脑上做的网站 怎么让别人看怎么做网站在谷歌
  • 同一ip 网站 权重怎样做才能发布你的网站
  • 上海利恩建设集团有限公司网站社交网站先做pc站可以吗
  • 用网站做淘宝客新媒体销售好做吗
  • 手机模板的网站哪个好wordpress关闭google字体
  • 医疗行业网站怎么做网站反链和外链的区别
  • html网站开发事例教程一起做网店官网下载
  • 中小企业网站优化锦州网站制作公司
  • 谁会在掏宝网上做网站网站开发与设计课程设计
  • 公司网站建设的改进的建议前潮网络网站建设
  • 济宁500元网站建设wordpress 安装错误
  • 网站建设周记网站建设公司面临的问题
  • 网站可视化编辑普通网站与营销型网站有什么区别
  • 网站 手机 微信 app福建网站开发企业
  • 台州网站制作推广net网站开发教程
  • seo的网站点个赞科技 网站制作
  • 百合网 网站 开发做推广都有什么网站
  • 娄底建设网站的公司wordpress 五色可选
  • 椒江网站建设公司企业网站建设合同书模板
  • 怎么给网站加ico图标怎么把网站横幅做很大