国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++ 設(shè)計(jì)模式之外觀模式

這篇具有很好參考價(jià)值的文章主要介紹了C++ 設(shè)計(jì)模式之外觀模式。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

【聲明】本題目來源于卡碼網(wǎng)(題目頁面 (kamacoder.com))

【提示:如果不想看文字介紹,可以直接跳轉(zhuǎn)到C++編碼部分】


【簡介】什么是外觀模式

????????外觀模式Facade Pattern , 也被稱為“??模式”,是?種結(jié)構(gòu)型設(shè)計(jì)模式,外觀模式定義了?個(gè)?層接?,這個(gè)接?使得?系統(tǒng)更容易使?,同時(shí)也隱藏了?系統(tǒng)的復(fù)雜性。

????????----??模式可以將?系統(tǒng)關(guān)在“??”隱藏起來,客戶端只需要通過外觀接?與外觀對象進(jìn)?交互,?不需要直接和多個(gè)?系統(tǒng)交互,?論?系統(tǒng)多么復(fù)雜,對于外部來說是隱藏的,這樣可以降低系統(tǒng)的耦合度。

????????舉個(gè)例?,假設(shè)你正在編寫的?個(gè)模塊?來處理?件讀取、解析、存儲(chǔ),我們可以將這個(gè)過程拆成三部分,然后創(chuàng)建?個(gè)外觀類,將?件系統(tǒng)操作、數(shù)據(jù)解析和存儲(chǔ)操作封裝在外觀類中,為客戶端提供?個(gè)簡化的接?,如果后續(xù)需要修改?件處理的流程或替換底層?系統(tǒng),也只需在外觀類中進(jìn)?調(diào)整,不會(huì)影響客戶端代碼。


【基本結(jié)構(gòu)】

????????外觀模式的基本結(jié)構(gòu)?較簡單,只包括“外觀”和“?系統(tǒng)類”:

  • 外觀類:對外提供?個(gè)統(tǒng)?的?層次接?,使復(fù)雜的?系統(tǒng)變得更易使?。
  • ?系統(tǒng)類:實(shí)現(xiàn)?系統(tǒng)的功能,處理外觀類指派的任務(wù)。

C++ 設(shè)計(jì)模式之外觀模式,c++,設(shè)計(jì)模式,外觀模式


?【簡易實(shí)現(xiàn)步驟】

下?使?Java代碼實(shí)現(xiàn)外觀模式的通?結(jié)構(gòu):

1. 子系統(tǒng)A

// ?系統(tǒng)A
class SubsystemA {
    public void operationA() {
        System.out.println("SubsystemA operation");
    }
}

2. 子系統(tǒng)B

// ?系統(tǒng)B
class SubsystemB {
    public void operationB() {
        System.out.println("SubsystemB operation");
    }
}

3. 子系統(tǒng)C

// ?系統(tǒng)C
class SubsystemC {
    public void operationC() {
        System.out.println("SubsystemC operation");
    }
}

4. 外觀類

// 外觀類
class Facade {
    private SubsystemA subsystemA;
    private SubsystemB subsystemB;
    private SubsystemC subsystemC;

    public Facade() {
        this.subsystemA = new SubsystemA();
        this.subsystemB = new SubsystemB();
        this.subsystemC = new SubsystemC();
    }

    // 外觀?法,封裝了對?系統(tǒng)的操作
    public void facadeOperation() {
        subsystemA.operationA();
        subsystemB.operationB();
        subsystemC.operationC();
    }
}

5. 客戶端代碼

// 客戶端
public class Main {
    public static void main(String[] args) {
        // 創(chuàng)建外觀對象
        Facade facade = new Facade();
        // 客戶端通過外觀類調(diào)??系統(tǒng)的操作
        facade.facadeOperation();
    }
}

????????在上?的代碼中, Facade 類是外觀類,封裝了對三個(gè)?系統(tǒng)SubSystem 的操作。客戶端通過調(diào)?外觀類的?法來實(shí)現(xiàn)對?系統(tǒng)的訪問,?不需要直接調(diào)??系統(tǒng)的?法。


【優(yōu)缺點(diǎn)和使用場景】

????????外觀模式通過提供?個(gè)簡化的接?,隱藏了系統(tǒng)的復(fù)雜性,降低了客戶端和?系統(tǒng)之間的耦合度,客戶端不需要了解系統(tǒng)的內(nèi)部實(shí)現(xiàn)細(xì)節(jié),也不需要直接和多個(gè)?系統(tǒng)交互,只需要通過外觀接?與外觀對象進(jìn)?交互。

????????但是如果需要添加新的?系統(tǒng)或修改?系統(tǒng)的?為,就可能需要修改外觀類,這違背了“開閉原則”。

????????外觀模式的應(yīng)?也?分普遍,下??種情況都使?了外觀模式來進(jìn)?簡化。

  • Spring框架是?個(gè)?泛使?外觀模式的例?。Spring框架提供了?個(gè)?量的功能,包括依賴注?、?向切?編程(AOP)、事務(wù)管理等。Spring的ApplicationContext 可以看作是外觀,隱藏了底層組件的復(fù)雜性,使得開發(fā)者可以更輕松地使?Spring的功能。
  • JDBC提供了?個(gè)?于與數(shù)據(jù)庫交互的接?。DriverManager 類可以看作是外觀,它簡化了數(shù)據(jù)庫驅(qū)動(dòng)的加載和連接的過程,隱藏了底層數(shù)據(jù)庫連接的復(fù)雜性。
  • Android系統(tǒng)的API中也使?了外觀模式。例如, Activity 類提供了?個(gè)外觀,使得開發(fā)者可以更容易地管理應(yīng)?的?命周期,??需關(guān)?底層的事件和狀態(tài)管理。

【編碼部分】

1. 題目描述

????????小明家的電源總開關(guān)控制了家里的三個(gè)設(shè)備:空調(diào)、臺(tái)燈和電視機(jī)。每個(gè)設(shè)備都有獨(dú)立的開關(guān)密碼,分別用數(shù)字1、2和3表示。即輸入1時(shí),空調(diào)關(guān)閉,輸入2時(shí),臺(tái)燈關(guān)閉,輸入3時(shí),電視機(jī)關(guān)閉,當(dāng)輸入為4時(shí),表示要關(guān)閉所有設(shè)備。請你使用外觀模式編寫程序來描述電源總開關(guān)的操作。

2. 輸入描述

????????第一行是一個(gè)整數(shù) N(1 <= N <= 100),表示后面有 N 行輸入。接下來的 N 行,每行包含一個(gè)數(shù)字,表示對應(yīng)設(shè)備的開關(guān)操作(1表示關(guān)閉空調(diào),2表示關(guān)閉臺(tái)燈,3表示關(guān)閉電視機(jī),4表示關(guān)閉所有設(shè)備)。

3. 輸出描述

????????輸出關(guān)閉所有設(shè)備后的狀態(tài),當(dāng)輸入的數(shù)字不在1-4范圍內(nèi)時(shí),輸出Invalid device code.

4. C++編碼實(shí)例

/**
* @version Copyright (c) 2024 NCDC, Servo。 Unpublished - All rights reserved
* @file FacadeMode.hpp
* @brief 外觀模式
* @autor 寫代碼的小恐龍er
* @date 2024/01/11
*/

#include <iostream>
#include <string>

using namespace std;
// 前置聲明
// 子系統(tǒng)1 -- 空調(diào)
class AirConditioner;
// 子系統(tǒng)2 -- 臺(tái)燈
class Light;
// 子系統(tǒng)3 -- 電視機(jī)
class TV;
// 外觀模式的管理類 -- 接口類的派生類
class FacadePowerSwitch;

// 子系統(tǒng)1 -- 空調(diào)
class AirConditioner
{
public:
    void TurnOff(){
        std::cout << "Air Conditioner is turned off." << endl;
    }
};

// 子系統(tǒng)1 -- 空調(diào)
class Light
{
public:
    void TurnOff(){
        std::cout << "Desk Lamp is turned off." << endl;
    }
};

// 子系統(tǒng)1 -- 空調(diào)
class TV
{
public:
    void TurnOff(){
        std::cout << "Television is turned off." << endl;
    }
};

// 外觀模式的管理類 -- 接口類的派生類
class FacadePowerSwitch
{
    // 成員數(shù)據(jù)
private:
   AirConditioner *_airConditioner;
   Light *_light;
   TV *_tv;
    // 成員函數(shù)
public:
    // 重載構(gòu)造函數(shù) 和 析構(gòu)函數(shù)
    FacadePowerSwitch()
    {
        _airConditioner = new AirConditioner();
        _light = new Light();
        _tv = new TV();
    }
    ~FacadePowerSwitch(){
        if(_airConditioner != nullptr) {
            delete _airConditioner;
            _airConditioner = nullptr;
        }
        if(_light != nullptr) {
            delete _light;
            _light = nullptr;
        }
        if(_tv != nullptr) {
            delete _tv;
            _tv = nullptr;
        }
    }
    
    // 子系統(tǒng)業(yè)務(wù)代碼
    void TurnOffContion(int orderType){
        switch(orderType)
        {
            case 1:
                _airConditioner->TurnOff();
                break;
            case 2:
                _light->TurnOff();
                break;
            case 3:
                _tv->TurnOff();
                break;
            case 4:
                std::cout << "All devices are off." << endl;
                break;
            default:
                std::cout << "Invalid device code." << endl;
                break;
        }
    }
};

int main()
{
    // 指令值個(gè)數(shù)
    int orderNum = 0;
    std::cin >> orderNum;
    // 創(chuàng)建外觀管理類對象
    FacadePowerSwitch *facadePowerSwitch = new FacadePowerSwitch();
    
    for(int i = 0; i < orderNum; i++)
    {
        // 指令值
        int orderType = 0;
        std::cin >> orderType;
        //并調(diào)用業(yè)務(wù)函數(shù)
        facadePowerSwitch->TurnOffContion(orderType);
    }
    
    delete facadePowerSwitch;
    facadePowerSwitch = nullptr;
    return 0;
}

......

To be continued.文章來源地址http://www.zghlxwxcb.cn/news/detail-798391.html

到了這里,關(guān)于C++ 設(shè)計(jì)模式之外觀模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式-外觀模式

    ? ? ?外觀模式(Facade Pattern)是屬于結(jié)構(gòu)型的設(shè)計(jì)模式,它的主要目的是為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一且更簡單的接口,還簡化了客戶端調(diào)用子系統(tǒng)功能的過程。 1 Facade(外觀類) : Facade 類提供了對子系統(tǒng)的簡潔、一致的接口。它包含了子系統(tǒng)中的多個(gè)模塊或組件的

    2024年01月19日
    瀏覽(39)
  • 設(shè)計(jì)模式詳解-外觀模式

    類型:結(jié)構(gòu)型模式 實(shí)現(xiàn)原理:定義了一個(gè)高層接口,向現(xiàn)有的系統(tǒng)中的一組接口提供一致的界面 目的:降低訪問復(fù)雜系統(tǒng)的內(nèi)部子系統(tǒng)時(shí)的復(fù)雜度,簡化客戶端之間的接口,使系統(tǒng)更加容易使用 何時(shí)使用:簡化復(fù)雜系統(tǒng),方便操作 解決方法:對客戶端和系統(tǒng)解耦,讓外觀類

    2024年02月12日
    瀏覽(22)
  • 設(shè)計(jì)模式:外觀模式

    外觀模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它提供了一個(gè)統(tǒng)一的接口,用于訪問子系統(tǒng)中的一組接口。外觀模式隱藏了子系統(tǒng)的復(fù)雜性,使得客戶端能夠更簡單地使用子系統(tǒng)的功能。 外觀模式的核心思想是將復(fù)雜的子系統(tǒng)封裝在一個(gè)外觀類中,客戶端只需要與外觀類進(jìn)行交互,而不需

    2024年02月07日
    瀏覽(32)
  • 設(shè)計(jì)模式(8)外觀模式

    設(shè)計(jì)模式(8)外觀模式

    一、 1、使用背景:降低訪問復(fù)雜系統(tǒng)的內(nèi)部子系統(tǒng)時(shí)的復(fù)雜度,簡化客戶端之間的接口。 2、定義: 為子系統(tǒng)中的一組接口定義一個(gè)一致的界面,此模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。完美地體現(xiàn)了依賴倒轉(zhuǎn)原則和迪米特法則的思想。 3、結(jié)構(gòu)

    2024年02月11日
    瀏覽(23)
  • 設(shè)計(jì)模式之~外觀模式

    設(shè)計(jì)模式之~外觀模式

    定義: ????????為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,此模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。 結(jié)構(gòu)圖: 區(qū)分中介模式: 門面模式對外提供一個(gè)接口 中介模式對內(nèi)提供一個(gè)接口 優(yōu)點(diǎn): 松耦合:用戶與子系統(tǒng)解耦,屏蔽子系統(tǒng);可以

    2024年02月07日
    瀏覽(36)
  • js設(shè)計(jì)模式:外觀模式

    js設(shè)計(jì)模式:外觀模式

    將復(fù)雜的功能封裝成可以簡單調(diào)用的方法,無需知道內(nèi)部的具體邏輯,只需要知道怎么去使用 類似于一把槍,你可以不知道內(nèi)部的槍機(jī),擊發(fā)機(jī),復(fù)進(jìn)簧,槍管,導(dǎo)氣裝置,彈夾是怎么合作配合完成發(fā)射和自動(dòng)填彈,你只需要知道你扣動(dòng)扳機(jī)就能完成這一系列復(fù)雜的操作,而那個(gè)扳機(jī)就是

    2024年02月22日
    瀏覽(20)
  • 設(shè)計(jì)模式之外觀模式筆記

    設(shè)計(jì)模式之外觀模式筆記

    記錄下學(xué)習(xí)設(shè)計(jì)模式-外觀模式的寫法。JDK使用版本為1.8版本。 意圖 :為子系統(tǒng)中的一組接口提供一個(gè)一致的界面,F(xiàn)acade模式定義了一個(gè)高層接口,這個(gè)接口使得這一子系統(tǒng)更加容易使用。 結(jié)構(gòu) : 其中: Facade知道哪些子系統(tǒng)類負(fù)責(zé)處理請求;將客戶的請求代理給適合的子系統(tǒng)

    2024年02月11日
    瀏覽(30)
  • Java設(shè)計(jì)模式-外觀模式

    在軟件開發(fā)過程中,經(jīng)常會(huì)遇到復(fù)雜的系統(tǒng)和龐大的類庫。這些系統(tǒng)往往包含了大量的類和子系統(tǒng),給開發(fā)人員帶來了挑戰(zhàn)。為了簡化接口設(shè)計(jì)和提高系統(tǒng)的可用性,設(shè)計(jì)模式提供了一種名為外觀模式的解決方案。 外觀模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,旨在為復(fù)雜系統(tǒng)提供一個(gè)簡

    2024年02月05日
    瀏覽(25)
  • 設(shè)計(jì)模式之代理模式與外觀模式

    設(shè)計(jì)模式之代理模式與外觀模式

    目錄 代理模式 簡介 優(yōu)缺點(diǎn) 角色職責(zé) 實(shí)現(xiàn) 運(yùn)用場景 外觀模式 簡介 角色職責(zé) 優(yōu)缺點(diǎn) 實(shí)現(xiàn) 使用場景 由于某些原因需要給某對象提供一個(gè)代理以控制對該對象的訪問。這時(shí),訪問對象不適合或者不能直接引用目標(biāo)對象,代理對象作為訪問對象和目標(biāo)對象之間的中介 優(yōu)點(diǎn): ?

    2024年02月10日
    瀏覽(27)
  • 設(shè)計(jì)模式結(jié)構(gòu)型——外觀模式

    設(shè)計(jì)模式結(jié)構(gòu)型——外觀模式

    目錄 什么是外觀模式 外觀模式的實(shí)現(xiàn) 外觀模式角色 外觀模式舉例 外觀模式類圖 外觀模式代碼實(shí)現(xiàn) 外觀模式的特點(diǎn) 優(yōu)點(diǎn) 缺點(diǎn) 注意事項(xiàng) 應(yīng)用場景 總結(jié) ????????外觀模式(Facade Pattern):又叫作門面模式,歸屬于結(jié)構(gòu)型模式。外觀模式定義了提供了定義了一個(gè)統(tǒng)一的高層

    2024年02月16日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包