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

怎么自己办网站黄页88网官网

怎么自己办网站,黄页88网官网,建立一个企业网站,选thinkphp还是wordpress什么是桥接模式? 桥接模式(Bridge Pattern)是一个用来解耦的设计模式,它将抽象层和实现层分离开,让它们可以独立变化。用最简单的话来说,就是让你能够改变抽象的功能和具体的实现,而不需要修改…

什么是桥接模式?

桥接模式(Bridge Pattern)是一个用来解耦的设计模式,它将抽象层实现层分离开,让它们可以独立变化。用最简单的话来说,就是让你能够改变抽象的功能具体的实现,而不需要修改对方的代码。

举个例子,想象你在做一个图形绘制的程序,你有很多图形(比如圆形、方形),而且每种图形可能有不同的绘制方式(比如屏幕绘制、打印机绘制)。如果你把所有的图形和绘制方式都写在一起,每次你增加一种新的绘制方式或新图形时,你都要修改大量的代码,这样就会让系统变得很复杂。

桥接模式的思路是:把**图形(抽象)绘制方式(实现)**分开,每一部分都可以独立变化,互不干扰。这样一来,增加新的图形或者新的绘制方式时,就不需要修改现有的代码,只需要扩展新的类即可。

桥接模式的结构

桥接模式有两个重要部分:

  1. 抽象部分(比如图形的类型,如圆形、方形等)
  2. 实现部分(比如具体的绘制方式,如屏幕绘制、打印绘制等)

这两个部分通过“桥”连接起来,形成了一个灵活可扩展的结构。下面的代码结构就能帮助你理解这一点。

桥接模式的代码示例

假设我们要实现一个图形绘制的程序,支持不同的图形(圆形、方形)和不同的绘制方式(屏幕绘制、打印机绘制)。我们来看看怎么用桥接模式来实现。

#include <iostream>
#include <string>// 绘图接口(实现类接口)
class DrawingAPI {
public:virtual void drawCircle(double x, double y, double radius) = 0;virtual ~DrawingAPI() = default;
};// 具体实现:屏幕绘制
class ScreenDrawingAPI : public DrawingAPI {
public:void drawCircle(double x, double y, double radius) override {std::cout << "在屏幕上绘制圆形,位置: (" << x << ", " << y << "), 半径: " << radius << std::endl;}
};// 具体实现:打印机绘制
class PrinterDrawingAPI : public DrawingAPI {
public:void drawCircle(double x, double y, double radius) override {std::cout << "在打印机上绘制圆形,位置: (" << x << ", " << y << "), 半径: " << radius << std::endl;}
};// 图形类(抽象类)
class Shape {
protected:DrawingAPI* drawingAPI;  // 这里持有一个指向绘图实现类的指针public:Shape(DrawingAPI* api) : drawingAPI(api) {}  // 通过构造函数注入具体实现类virtual void draw() = 0;  // 绘制图形的接口virtual void resize(double factor) = 0;  // 调整图形大小virtual ~Shape() = default;
};// 扩展的具体图形类:圆形
class Circle : public Shape {
private:double x, y, radius;  // 圆形的坐标和半径public:Circle(double x, double y, double radius, DrawingAPI* api) : Shape(api), x(x), y(y), radius(radius) {}void draw() override {drawingAPI->drawCircle(x, y, radius);  // 将绘制任务委托给具体实现}void resize(double factor) override {radius *= factor;  // 调整圆形的半径}
};int main() {ScreenDrawingAPI screenAPI;  // 创建屏幕绘制实现PrinterDrawingAPI printerAPI;  // 创建打印机绘制实现// 创建圆形对象,使用不同的绘制方式Circle circle1(1, 2, 3, &screenAPI);  // 在屏幕上绘制Circle circle2(5, 6, 4, &printerAPI);  // 在打印机上绘制circle1.draw();  // 屏幕绘制圆形circle2.draw();  // 打印机绘制圆形circle1.resize(2.0);  // 改变圆形大小circle1.draw();  // 再次绘制,使用屏幕绘制return 0;
}

代码讲解

让我们一步步来解读这段代码,看看桥接模式是如何工作的。

1. 绘图接口(DrawingAPI
class DrawingAPI {
public:virtual void drawCircle(double x, double y, double radius) = 0;virtual ~DrawingAPI() = default;
};

这个类定义了一个绘制圆形的方法 drawCircle,它只是一个接口,并不做具体的绘制工作。任何具体的绘制方式(比如屏幕绘制、打印机绘制)都需要实现这个接口。

2. 具体的绘图实现(ScreenDrawingAPIPrinterDrawingAPI
class ScreenDrawingAPI : public DrawingAPI {
public:void drawCircle(double x, double y, double radius) override {std::cout << "在屏幕上绘制圆形,位置: (" << x << ", " << y << "), 半径: " << radius << std::endl;}
};class PrinterDrawingAPI : public DrawingAPI {
public:void drawCircle(double x, double y, double radius) override {std::cout << "在打印机上绘制圆形,位置: (" << x << ", " << y << "), 半径: " << radius << std::endl;}
};

这两个类分别实现了 DrawingAPI 接口,提供了不同的绘制方式。ScreenDrawingAPI 在屏幕上绘制圆形,PrinterDrawingAPI 在打印机上绘制圆形。

3. 抽象类(Shape
class Shape {
protected:DrawingAPI* drawingAPI;  // 持有一个绘图实现类的指针public:Shape(DrawingAPI* api) : drawingAPI(api) {}  // 通过构造函数注入具体的绘图实现virtual void draw() = 0;  // 绘制图形的接口virtual void resize(double factor) = 0;  // 调整图形大小
};

Shape 是一个抽象类,它定义了所有图形的共同接口:draw()resize()。关键是它持有一个 DrawingAPI 的指针,这样它可以将具体的绘制任务委托给实现类。

4. 具体图形类(Circle
class Circle : public Shape {
private:double x, y, radius;  // 圆形的坐标和半径public:Circle(double x, double y, double radius, DrawingAPI* api) : Shape(api), x(x), y(y), radius(radius) {}void draw() override {drawingAPI->drawCircle(x, y, radius);  // 调用具体绘图实现的drawCircle方法}void resize(double factor) override {radius *= factor;  // 改变圆形的半径}
};

Circle 类继承自 Shape,并实现了 draw()resize() 方法。它通过 drawingAPI 指针来调用具体的绘制方法,实现了与绘制方式的解耦。

5. 客户端代码

main 函数中,我们创建了两个 Circle 对象,分别使用了 ScreenDrawingAPIPrinterDrawingAPI 作为绘制实现。通过调用 circle1.draw()circle2.draw(),我们可以看到两个不同的绘制方式。

int main() {ScreenDrawingAPI screenAPI;  // 屏幕绘制实现PrinterDrawingAPI printerAPI;  // 打印机绘制实现// 创建两个圆形对象,分别使用不同的绘制方式Circle circle1(1, 2, 3, &screenAPI);Circle circle2(5, 6, 4, &printerAPI);circle1.draw();  // 屏幕绘制圆形circle2.draw();  // 打印机绘制圆形circle1.resize(2.0);  // 改变圆形大小circle1.draw();  // 再次绘制,使用屏幕绘制return 0;
}

总结

桥接模式的主要优点就是解耦

。我们把抽象部分(如图形类型)和实现部分(如绘制方式)分开,避免了两者之间的紧耦合。这样我们可以很方便地扩展新的图形类型或新的绘制方式,而不需要修改现有的代码。

比如,如果你以后需要支持新的绘制方式(比如在Web上绘制),你只需要实现一个新的 DrawingAPI 类,不用改动任何图形类;同样,如果你需要增加新的图形类型(比如矩形),只需要扩展 Shape 类,不需要改动任何绘制实现。

桥接模式适用于需要将抽象和实现分离,并且它们可能会独立变化的场景。

本文由mdnice多平台发布

http://www.hkea.cn/news/727788/

相关文章:

  • 怎么自己做网站服务器linux百度账号查询
  • 梧州网站推广方案百度热搜 百度指数
  • 网站不兼容ie6自助建站模板
  • 甘肃网站建设公司百中搜优化软件
  • 国内外贸网站建设公司seo教程 百度网盘
  • 一物一码二维码生成系统最好用的系统优化软件
  • 如何在大网站做外链镇江网站建站
  • 杭州网站建设公司导航短视频营销案例
  • 昆明做网站建设有哪些长尾关键词排名工具
  • 一女被多男做的视频网站网站seo系统
  • 网站建设 青海网站建设找哪家好
  • win7 网站配置优化方案官网电子版
  • 广州seo优化公司排名浙江seo博客
  • 全网推广的方式有哪些抖音seo推荐算法
  • 网站开发开源架构抖音营销软件
  • 自己做的网站能放到网上么青岛seo经理
  • 营业推广策划方案邵阳网站seo
  • 手机网站横向切换kol合作推广
  • 专门做超市海报的网站宁波seo咨询
  • 仿网站上的焦点图在线看seo网站
  • 做网站的业务员艾滋病阻断药有哪些
  • web集团网站建设广告投放平台有哪些
  • 大连做网站建设广告资源对接平台
  • 做网站怎么写工作日志泉州网站seo公司
  • wordpress外链站内打开搜索引擎是什么意思啊
  • 做论坛网站需要什么备案新站seo优化快速上排名
  • 动漫网站html百度网盘搜索
  • 怎么看一个网站什么语言做的宝鸡seo培训
  • 数据库网站建设公司他达拉非片
  • 英文商城网站建设搜索引擎营销的特点