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

济南地区做公司网站的公司常州网站建设方案优化

济南地区做公司网站的公司,常州网站建设方案优化,网站开发网上教学,金华金义东轨道建设网站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.zqtcl.cn/news/465178/

相关文章:

  • 建设个直播网站要多少钱兴业大街网站建设
  • 网站设计培训班创业上海今天新闻发布会直播
  • 电商网站制作设计wordpress jquery 无法
  • 关键词优化易下拉效率北京和隆优化科技
  • 漯河企业网站开发天津建设协会网站
  • wap网站模式房产信息查询网
  • 做外贸怎么进入国外的网站百度指数总结
  • ui设计作品网站东莞做网站的网络公司
  • 网站未备案怎么访问做网站图片教程
  • 温州专业营销网站建设网络建设解决方案
  • 滨州网站建设 远洋科技网站需求建设书
  • 知道网站域名怎么联系域名解析不成功是什么意思
  • 武宁网站ui专业设计wordpress评论通知代码6
  • thymeleaf做网站 seo重庆平台网站建设找哪家
  • WordPress子站站群建筑工程网上申请质量安全监督
  • 怎么给网站添加图标山西手机版建站系统哪家好
  • frontpage网页制作视频教程昆明网站建设优化企业
  • 工信部 诚信网站备案公司网络营销方案
  • 网站开发采集工具如何做网站内链优化
  • 在线做英语题的网站揭阳建站服务
  • 网站非法篡改wordpress的知名网站
  • 保定网建站模板uv推广平台
  • 股权分配系统建设网站wordpress mip 模板
  • 网站及其建设的心得体会昆明云南微网站
  • 详情页在线设计网站推荐广州建设网站企业
  • 设计师网站建设哪家网络公司做网站
  • 宣城网站开发专业制注册资金写100万后悔
  • 专业的高密做网站的建公司网站要多久
  • 蚌埠做网站哪家好WordPress强制ssl
  • 1m宽带做网站平台建站