日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C 桥接模式 - 开关和电器

發布時間:2023/12/2 编程问答 129 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C 桥接模式 - 开关和电器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

橋接模式(Bridge Pattern)是將抽象部分與它的實現部分分離,使它們都可以獨立地變化。1

模式結構

UML 結構圖:

  • Abstraction(抽象類):用于定義抽象類的接口,并且維護一個指向 Implementor 實現類的指針。它與 Implementor 之間具有關聯關系。

  • RefinedAbstraction(擴充抽象類):擴充由 Abstraction 定義的接口,在 RefinedAbstraction 中可以調用在 Implementor 中定義的業務方法。

  • Implementor(實現類接口):定義實現類的接口,這個接口不一定要與 Abstraction 的接口完全一致,事實上這兩個接口可以完全不同。

  • ConcreteImplementor(具體實現類):實現了 Implementor 定義的接口,在不同的 ConcreteImplementor 中提供基本操作的不同實現。在程序運行時,ConcreteImplementor 對象將替換其父類對象,提供給 Abstraction 具體的業務操作方法。

案例分析

對于開關和電器來說,不管任何時候,都可以在不觸及另一方的情況下進行更換。比如,可以在不更換開關的情況下換掉燈泡(或風扇),也可以在不接觸燈泡(或風扇)的情況下更換掉開關,甚至可以在不接觸開關的情況下將燈泡和風扇互換。

這看起來很自然,當然也應該是這樣!當不同的事物聯系到一起時,它們應該在一個可以變更或者替換的系統中,以便不相互影響或者使影響盡可能的小,這樣才能更方便、更低成本地去管理系統。試想一下,如果要更換房間里的一個燈泡,還必須把開關也換了,你會考慮使用這樣的系統嗎?

代碼實現

創建實現類接口

所有電器都有一些共性,可以被打開和關閉:

//?implementor.h #ifndef?IMPLEMENTOR_H #define?IMPLEMENTOR_H//?電器 class?IEquipment { public:virtual?~IEquipment()?{}//?打開virtual?void?PowerOn()?=?0;//?關閉virtual?void?PowerOff()?=?0; };#endif?//?IMPLEMENTOR_H

創建具體實現類

接下來,是真正的電器 - 電燈和風扇,它們實現了 IEquipment 接口:

//?concrete_implementor.h #ifndef?CONCRETE_IMPLEMENTOR_H #define?CONCRETE_IMPLEMENTOR_H#include?"implementor.h" #include?//?電燈 class?Light?:?public?IEquipment { public://?開燈void?PowerOn()?override?{std::cout?<<?"Light?is?on."?<<?std::endl;}//?關燈void?PowerOff()?override?{std::cout?<<?"Light?is?off."?<<?std::endl;} };//?風扇 class?Fan?:?public?IEquipment { public://?打開風扇void?PowerOn()?override?{std::cout?<<?"Fan?is?on."?<<?std::endl;}//?關閉風扇void?PowerOff()?override?{std::cout?<<?"Fan?is?off."?<<?std::endl;} };#endif?//?CONCRETE_IMPLEMENTOR_H

創建客戶端

很好,是時候將開關和電器關聯起來了:

//?main.cpp #include?"refined_abstraction.h" #include?"concrete_implementor.h"#ifndef?SAFE_DELETE #define?SAFE_DELETE(p)?{?if(p){delete?p;?p=nullptr;}?} #endifint?main() {//?創建電器?-?電燈、風扇IEquipment?*light?=?new?Light();IEquipment?*fan?=?new?Fan();/***?創建開關?-?拉鏈式開關、兩位開關*?將拉鏈式開關和電燈關聯起來,將兩位開關和風扇關聯起來**/ISwitch?*pullChain?=?new?PullChainSwitch(light);ISwitch?*twoPosition?=?new?TwoPositionSwitch(fan);//?開燈、關燈pullChain->On();pullChain->Off();//?打開風扇、關閉風扇twoPosition->On();twoPosition->Off();SAFE_DELETE(twoPosition);SAFE_DELETE(pullChain);SAFE_DELETE(fan);SAFE_DELETE(light);getchar();return?0; }

輸出如下:

Switch on the equipment with a pull chain switch.

Light is on.

Switch off the equipment with a pull chain switch.

Light is off.

Switch on the equipment with a two-position switch.

Fan is on.

Switch off the equipment with a two-position switch.

Fan is off.

聲明:

本文于網絡整理,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯系我們刪除或授權事宜。

總結

以上是生活随笔為你收集整理的C 桥接模式 - 开关和电器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。