中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

襄陽營銷型網(wǎng)站寶雞seo培訓

襄陽營銷型網(wǎng)站,寶雞seo培訓,蘭州網(wǎng)站制作公司哪個好,百度網(wǎng)站建立什么是橋接模式? 橋接模式(Bridge Pattern)是一個用來解耦的設計模式,它將抽象層和實現(xiàn)層分離開,讓它們可以獨立變化。用最簡單的話來說,就是讓你能夠改變抽象的功能和具體的實現(xiàn),而不需要修改…

什么是橋接模式?

橋接模式(Bridge Pattern)是一個用來解耦的設計模式,它將抽象層實現(xiàn)層分離開,讓它們可以獨立變化。用最簡單的話來說,就是讓你能夠改變抽象的功能具體的實現(xiàn),而不需要修改對方的代碼。

舉個例子,想象你在做一個圖形繪制的程序,你有很多圖形(比如圓形、方形),而且每種圖形可能有不同的繪制方式(比如屏幕繪制、打印機繪制)。如果你把所有的圖形和繪制方式都寫在一起,每次你增加一種新的繪制方式或新圖形時,你都要修改大量的代碼,這樣就會讓系統(tǒng)變得很復雜。

橋接模式的思路是:把**圖形(抽象)繪制方式(實現(xiàn))**分開,每一部分都可以獨立變化,互不干擾。這樣一來,增加新的圖形或者新的繪制方式時,就不需要修改現(xiàn)有的代碼,只需要擴展新的類即可。

橋接模式的結(jié)構(gòu)

橋接模式有兩個重要部分:

  1. 抽象部分(比如圖形的類型,如圓形、方形等)
  2. 實現(xiàn)部分(比如具體的繪制方式,如屏幕繪制、打印繪制等)

這兩個部分通過“橋”連接起來,形成了一個靈活可擴展的結(jié)構(gòu)。下面的代碼結(jié)構(gòu)就能幫助你理解這一點。

橋接模式的代碼示例

假設我們要實現(xiàn)一個圖形繪制的程序,支持不同的圖形(圓形、方形)和不同的繪制方式(屏幕繪制、打印機繪制)。我們來看看怎么用橋接模式來實現(xiàn)。

#include <iostream>
#include <string>// 繪圖接口(實現(xiàn)類接口)
class DrawingAPI {
public:virtual void drawCircle(double x, double y, double radius) = 0;virtual ~DrawingAPI() = default;
};// 具體實現(xiàn):屏幕繪制
class ScreenDrawingAPI : public DrawingAPI {
public:void drawCircle(double x, double y, double radius) override {std::cout << "在屏幕上繪制圓形,位置: (" << x << ", " << y << "), 半徑: " << radius << std::endl;}
};// 具體實現(xiàn):打印機繪制
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;  // 這里持有一個指向繪圖實現(xiàn)類的指針public:Shape(DrawingAPI* api) : drawingAPI(api) {}  // 通過構(gòu)造函數(shù)注入具體實現(xiàn)類virtual void draw() = 0;  // 繪制圖形的接口virtual void resize(double factor) = 0;  // 調(diào)整圖形大小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);  // 將繪制任務委托給具體實現(xiàn)}void resize(double factor) override {radius *= factor;  // 調(diào)整圓形的半徑}
};int main() {ScreenDrawingAPI screenAPI;  // 創(chuàng)建屏幕繪制實現(xiàn)PrinterDrawingAPI printerAPI;  // 創(chuàng)建打印機繪制實現(xiàn)// 創(chuàng)建圓形對象,使用不同的繪制方式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,它只是一個接口,并不做具體的繪制工作。任何具體的繪制方式(比如屏幕繪制、打印機繪制)都需要實現(xiàn)這個接口。

2. 具體的繪圖實現(xiàn)(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;}
};

這兩個類分別實現(xiàn)了 DrawingAPI 接口,提供了不同的繪制方式。ScreenDrawingAPI 在屏幕上繪制圓形,PrinterDrawingAPI 在打印機上繪制圓形。

3. 抽象類(Shape
class Shape {
protected:DrawingAPI* drawingAPI;  // 持有一個繪圖實現(xiàn)類的指針public:Shape(DrawingAPI* api) : drawingAPI(api) {}  // 通過構(gòu)造函數(shù)注入具體的繪圖實現(xiàn)virtual void draw() = 0;  // 繪制圖形的接口virtual void resize(double factor) = 0;  // 調(diào)整圖形大小
};

Shape 是一個抽象類,它定義了所有圖形的共同接口:draw()resize()。關鍵是它持有一個 DrawingAPI 的指針,這樣它可以將具體的繪制任務委托給實現(xiàn)類。

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);  // 調(diào)用具體繪圖實現(xiàn)的drawCircle方法}void resize(double factor) override {radius *= factor;  // 改變圓形的半徑}
};

Circle 類繼承自 Shape,并實現(xiàn)了 draw()resize() 方法。它通過 drawingAPI 指針來調(diào)用具體的繪制方法,實現(xiàn)了與繪制方式的解耦。

5. 客戶端代碼

main 函數(shù)中,我們創(chuàng)建了兩個 Circle 對象,分別使用了 ScreenDrawingAPIPrinterDrawingAPI 作為繪制實現(xiàn)。通過調(diào)用 circle1.draw()circle2.draw(),我們可以看到兩個不同的繪制方式。

int main() {ScreenDrawingAPI screenAPI;  // 屏幕繪制實現(xiàn)PrinterDrawingAPI printerAPI;  // 打印機繪制實現(xiàn)// 創(chuàng)建兩個圓形對象,分別使用不同的繪制方式Circle circle1(1, 2, 3, &screenAPI);Circle circle2(5, 6, 4, &printerAPI);circle1.draw();  // 屏幕繪制圓形circle2.draw();  // 打印機繪制圓形circle1.resize(2.0);  // 改變圓形大小circle1.draw();  // 再次繪制,使用屏幕繪制return 0;
}

總結(jié)

橋接模式的主要優(yōu)點就是解耦

。我們把抽象部分(如圖形類型)和實現(xiàn)部分(如繪制方式)分開,避免了兩者之間的緊耦合。這樣我們可以很方便地擴展新的圖形類型或新的繪制方式,而不需要修改現(xiàn)有的代碼。

比如,如果你以后需要支持新的繪制方式(比如在Web上繪制),你只需要實現(xiàn)一個新的 DrawingAPI 類,不用改動任何圖形類;同樣,如果你需要增加新的圖形類型(比如矩形),只需要擴展 Shape 類,不需要改動任何繪制實現(xiàn)。

橋接模式適用于需要將抽象和實現(xiàn)分離,并且它們可能會獨立變化的場景。

本文由mdnice多平臺發(fā)布

http://www.risenshineclean.com/news/5165.html

相關文章:

  • 江西網(wǎng)站制作企業(yè)qq一年多少費用
  • 哪個網(wǎng)站可以做旅行攻略seo推廣排名公司
  • 網(wǎng)站建設思路品牌推廣專員
  • 蕪湖哪家公司做網(wǎng)站不錯什么叫seo網(wǎng)絡推廣
  • 互聯(lián)網(wǎng)app網(wǎng)站建設方案模板百度seo關鍵詞優(yōu)化公司
  • 攜程特牌 的同時做別的網(wǎng)站蘭州做網(wǎng)站的公司
  • 上海網(wǎng)站建設備案號鄭州seo代理外包公司
  • 富錦建設局網(wǎng)站現(xiàn)在網(wǎng)絡推廣方式
  • 自己搭建服務器 發(fā)布網(wǎng)站 域名如何申請秦皇島seo招聘
  • 網(wǎng)站的建設屬于無形資產(chǎn)海外市場推廣策略
  • asp的網(wǎng)站為企業(yè)策劃一次網(wǎng)絡營銷活動
  • 東莞網(wǎng)站建設在哪里福建百度seo排名點擊軟件
  • 網(wǎng)站開發(fā)公司的選擇百色seo外包
  • 廈門網(wǎng)站建設公seo關鍵詞優(yōu)化推廣哪家好
  • 三水建設網(wǎng)站國外推廣都是怎么推廣
  • 大慶百度做網(wǎng)站多少錢外貿(mào)國際網(wǎng)站推廣
  • 用帝國做的網(wǎng)站只收錄首頁百度一下百度搜索
  • 電商系統(tǒng)開發(fā)解決方案鎮(zhèn)江百度seo
  • 門戶網(wǎng)站建設情況總結(jié)淘寶指數(shù)查詢?nèi)肟?/a>
  • 手機表格制作軟件排名優(yōu)化培訓
  • 青島市住房和城鄉(xiāng)建設局官方網(wǎng)站營銷傳播服務
  • 優(yōu)化服務平臺windows優(yōu)化大師win10
  • 網(wǎng)站制作教程企業(yè)網(wǎng)站的域名是該企業(yè)的
  • wordpress優(yōu)化版seo靜態(tài)頁源碼
  • 做網(wǎng)站怎么插入圖片推廣宣傳
  • 廣州市政府門戶網(wǎng)站淘寶運營培訓班學費大概多少
  • 香港空間的網(wǎng)站會關嗎網(wǎng)站接廣告平臺
  • 上饒做網(wǎng)站的公司杭州seo專員
  • 用html做女裝網(wǎng)站快速seo排名優(yōu)化
  • 網(wǎng)站開發(fā) 項目的招標文件東莞搜索網(wǎng)絡優(yōu)化