UML考試 uml考試試題



文章插圖
UML考試 uml考試試題

文章插圖
適配器模式概述
適配器模式(Adapter Pattern)定義:將一個類的接口轉換成客戶希望的另一個接口 。適配器模式讓那些不兼容的類可以一起工作 。適配器模式是作為兩個不兼容的接口之間的橋梁 。這種類型的設計模式屬于結構型模式 , 兼容多個獨立接口的功能 。在生活中用電電壓是220V , 但是電腦、手機、LED等設備不會使用高電壓 , 因此都需要電源適配器將220V轉換成對應的低電壓 。其中電源適配器就充當一個適配器的角色 。
適配器模式結構
適配器模式結構包含以下幾個角色:
適配器類(Adapter):適配器與適配者之間是繼承或實現關系 。適配者類(Adaptee):適配器與適配者之間是關聯關系 。目標抽象類(Target):定義客戶所需要的接口 。
適配器模式UML類圖如下:
模式的應用實例
用適配器模式(Adapter)模擬新能源汽車的發動機 。能源汽車的發動機有電能發動機(Electric Motor)和光能發動機(Optical Motor)等 , 各種發動機的驅動方法不同 , 例如 , 電能發動機的驅動方法 ElectricDrive() 是用電能驅動 , 而光能發動機的驅動方法 OpticalDrive() 是用光能驅動 , 它們是適配器模式中被訪問的適配者 。
客戶端希望用統一的發動機驅動方法 drive() 訪問這兩種發動機 , 所以必須定義一個統一的目標接口 Motor , 然后再定義電能適配器(Electric Adapter)和光能適配器(Optical Adapter)去適配這兩種發動機 。
【UML考試 uml考試試題】代碼:
// 適配器模式.cpp : 此文件包含 "main" 函數 。程序執行將在此處開始并結束 。//#include <iostream>using namespace std;typedef enum{ELECTRIC = 0,OPTICAL}ADAPTER_TYPE;//電機基類class Adapter{public:Adapter() = default;virtual ~Adapter() = default;virtual void Driver() = 0;};//電能發動機class ElectricMotor{public:ElectricMotor() = default;~ElectricMotor() = default;void ElectricDrive() { cout << "電能發動機驅動汽車" << endl; }};//光能發動機class OpticalMotor{public:OpticalMotor() = default;~OpticalMotor() = default;void OpticalDriver() { cout << "光能發動機驅動汽車" << endl; }};class ElectricAdapter : public Adapter{public:ElectricAdapter(){pMotor = new ElectricMotor();}~ElectricAdapter(){if (pMotor){delete pMotor;pMotor = nullptr;}}void Driver(){pMotor->ElectricDrive();}private:ElectricMotor* pMotor;};class OpticalAdapter : public Adapter{public:OpticalAdapter(){pMotor = new OpticalMotor();}~OpticalAdapter(){if (pMotor){delete pMotor;pMotor = nullptr;}}void Driver(){pMotor->OpticalDriver();}private:OpticalMotor* pMotor;};class AdapterFactory{public:static Adapter* CreateAdapter(ADAPTER_TYPE type){switch (type){case ADAPTER_TYPE::ELECTRIC:return new ElectricAdapter();case ADAPTER_TYPE::OPTICAL:return new OpticalAdapter();default:return nullptr;}}};int main(){Adapter* pAdapter = nullptr;pAdapter = AdapterFactory::CreateAdapter(ELECTRIC);pAdapter->Driver();delete pAdapter;pAdapter = AdapterFactory::CreateAdapter(OPTICAL);pAdapter->Driver();delete pAdapter;return 0;}適配器模式優缺點
優點
更好的復用性:系統需要使用現有的類 , 而此類的接口不符合系統的需要 。那么通過適配器模式就可以讓這些功能得到更好的復用 。透明、簡單:客戶端可以調用同一接口 , 因而對客戶端來說是透明的 。這樣做更簡單 & 更直接更好的擴展性:在實現適配器功能的時候 , 可以調用自己開發的功能 , 從而自然地擴展系統的功能 。解耦性:將目標類和適配者類解耦 , 通過引入一個適配器類重用現有的適配者類 , 而無需修改原有代碼符合開放-關閉原則:同一個適配器可以把適配者類和它的子類都適配到目標接口;可以為不同的目標接口實現不同的適配器 , 而不需要修改待適配類
缺點
過多地使用適配器 , 會讓系統非常零亂 , 不易整體進行把握 。