設計模式:外觀模式 Facade

目錄

  • 前言
  • 問題
  • 解決方案
  • 結構
  • 代碼


前言

外觀是一種結構型設計模式,能為程序庫、框架或其他復雜類提供一個簡單的接口。


問題

假設你必須在代碼中使用某個復雜的庫或框架中的眾多對象。正常情況下, 你需要負責所有對象的初始化工作、 管理其依賴關系并按正確的順序執行方法等。

最終, 程序中類的業務邏輯將與第三方類的實現細節緊密耦合,使得理解和維護代碼的工作很難進行。

解決方案

外觀類為包含許多活動部件的復雜子系統提供一個簡單的接口。與直接調用子系統相比,外觀提供的功能可能比較有限,但它卻包含了客戶端真正關心的功能。

如果你的程序需要與包含幾十種功能的復雜庫整合, 但只需使用其中非常少的功能,那么使用外觀模式會非常方便。

例如,上傳貓咪搞笑短視頻到社交媒體網站的應用可能會用到專業的視頻轉換庫,但它只需使用一個包含 encode(filename, format) 方法(以文件名與文件格式為參數進行編碼的方法,其內部封裝了調用專業庫的具體實現)的類即可。 在創建這個類并將其連接到視頻轉換庫后,你就擁有了自己的第一個外觀。

結構

在這里插入圖片描述

代碼

#include <iostream>
#include <string>
#include <memory>
using namespace std;// 復雜子系統:視頻格式解析器
class VideoParser {
public:void parse(const string& filename) {cout << "解析視頻文件: " << filename << endl;}
};// 復雜子系統:視頻編碼器
class VideoEncoder {
public:void encode(const string& format) {cout << "將視頻編碼為 " << format << " 格式" << endl;}
};// 復雜子系統:視頻壓縮器
class VideoCompressor {
public:void compress(int quality) {cout << "壓縮視頻,質量等級: " << quality << endl;}
};// 其他庫里面的類
// ......// 外觀類:提供簡單的視頻轉換接口
class VideoConverterFacade {
private:// 外觀類包含復雜子系統的智能指針shared_ptr<VideoParser> parser;shared_ptr<VideoEncoder> encoder;shared_ptr<VideoCompressor> compressor;public:VideoConverterFacade(){parser=make_shared<VideoParser>();encoder=make_shared<VideoEncoder>();compressor=make_shared<VideoCompressor>();}// 簡化的接口:轉換視頻格式void convert(const string& filename, const string& format) {cout << "開始視頻轉換..." << endl;// 內部處理復雜的子系統交互parser->parse(filename);encoder->encode(format);compressor->compress(80); // 使用默認質量std::cout << "視頻轉換完成!" << std::endl;}
};int main(){auto facade=make_shared<VideoConverterFacade>();facade->convert("666.mp4","mp4");return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/91100.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/91100.shtml
英文地址,請注明出處:http://en.pswp.cn/web/91100.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據結構初階】--二叉樹(四)

&#x1f525;個人主頁&#xff1a;草莓熊Lotso &#x1f3ac;作者簡介&#xff1a;C研發方向學習者 &#x1f4d6;個人專欄&#xff1a; 《C語言》 《數據結構與算法》《C語言刷題集》《Leetcode刷題指南》 ??人生格言&#xff1a;生活是默默的堅持&#xff0c;毅力是永久的…

三、平面度檢測-差值法

方法一: dev_get_window (WindowHandle) *讀取3通道彩色融合圖 read_image (Image, ./XYZ彩色融合圖.tiff) *拆分3個通道 decompose3 (Image, x, y, z) *將3個通道圖像轉換為3D模型 xyz_to_object_model_3d (x,y, z, ObjectModel3D) *顯示動態3D模型 threshold (z, Regions,…

什么是數據編排?數據編排的流程、優勢、挑戰及工具有哪些?

目錄 一、數據編排的定義與概念 1.數據編排的基本含義 2.數據編排與相關概念的區別 3.數據編排的重要性 二、數據編排的流程 1.需求分析&#xff1a; 2.數據源識別與連接&#xff1a; 3.數據抽取&#xff1a; 4.數據轉換&#xff1a; 5.數據加載&#xff1a; 6.監控…

【C++算法】82.BFS解決FloodFill算法_被圍繞的區域

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 130. 被圍繞的區域 題目描述&#xff1a; 解法 BFS一層層剝開。 C 算法代碼&#xff1a; class Solution {// 定義四個方向的偏移量&#xff1a;右、左、下、上int dx[4] …

商湯發布具身智能平臺,讓機器人像人一樣和現實世界交互

7月27日&#xff0c;在“大愛無疆模塑未來”WAIC 2025大模型論壇上&#xff0c;商湯科技重磅發布「悟能」具身智能平臺。「悟能」具身智能平臺以商湯具身世界模型為核心引擎&#xff0c;依托商湯大裝置提供端側和云側算力支持&#xff0c;能夠為機器人、智能設備提供強大的感知…

MCP工作原理

在談MCP原理前&#xff0c;我們先談談MCP的技術前身—Function Calling。1.Function Calling技術在FunctionCalling技術出現之前&#xff0c;大語言模型雖然擁有強大的知識儲備和語言理解能力&#xff0c;但是只能提供自身數據庫已有的信息&#xff0c;無法和外界進行信息交互。…

VSCode手動版本更新

技術背景 使用VSCode的的過程中&#xff0c;如果打開了自動更新功能&#xff0c;每隔一段時間就會有更新提示。為了保持版本的穩定性&#xff0c;我們可以在設置中將Update: Mode設置為none&#xff0c;這樣就不會觸發自動更新。但有時又有版本更新的需求&#xff0c;可能是版本…

醫療超聲成像專用AFE模擬前端

醫療超聲成像作為一種廣泛應用于臨床診斷的重要技術&#xff0c;對于提供清晰、準確的醫學圖像起著關鍵作用。在超聲成像系統中&#xff0c;AFE模擬前端扮演著至關重要的角色。它負責對超聲換能器接收到的微弱電信號進行處理和轉換&#xff0c;為后續的數字信號處理提供高質量的…

機器學習之線性回歸——小白教學

一、線性回歸簡介1.什么是線性回歸線性回歸(Linear regression)是利?回歸?程(函數)對?個或多個?變量(特征值)和因變量(?標值)之間關系進?建模的?種分析?式。特點&#xff1a;只有?個?變量的情況稱為單變量回歸&#xff0c;多于?個?變量情況的叫做多元回歸線性回…

.NET 10 中的新增功能系列文章1——運行時中的新增功能

引言 隨著 .NET 10 預覽版6的發布&#xff0c;微軟在運行時層面帶來了一系列重要的性能改進和新功能。這些改進主要集中在JIT編譯器優化、硬件指令集支持、內存管理等方面&#xff0c;旨在進一步提升應用程序的執行效率和資源利用率。本文將詳細解析這些運行時增強功能&#x…

安寶特方案丨AI算法能力開放平臺:適用于人工裝配質檢、點檢、實操培訓

當前工業AI圖形識別算法的應用存在投入成本高、維護更新難、依賴固定相機、應用范圍窄、與實際作業脫節等問題。 針對以上情況&#xff0c;安寶特提出了“AI算法能力開放平臺”&#xff0c;目的是讓AI圖形識別算法可以與現場實際的人工點檢作業、裝配作業、質檢作業、培訓作業…

水下目標識別準確率↑89%!陌訊多模態融合算法在智慧水務的落地實踐

一、行業痛點&#xff1a;智慧水務的檢測困境據《2024城市水務智能化白皮書》統計&#xff0c;傳統水務檢測面臨三大挑戰&#xff1a;??水體干擾??&#xff1a;渾濁度>100NTU時&#xff0c;目標漏檢率高達65%??動態環境??&#xff1a;水流擾動導致目標形變&#xff…

手動開發一個串口調試工具(三):基于 Qt Widgets 搭建串口調試界面

在上一篇中&#xff0c;我們通過 QCoreApplication 構建了一個基礎的串口收發控制臺程序&#xff0c;并實現了周期發送、十六進制轉換和數據讀取等核心功能。本篇將基于此邏輯&#xff0c;進一步將其封裝為一個圖形化界面程序&#xff0c;借助 Qt Widgets 提供的控件搭建完整的…

量子計算革命:重新定義計算的邊界與未來

引言&#xff1a;我們正站在計算革命的新起點 當IBM在2019年宣布實現"量子霸權"時&#xff0c;很多人認為這只是實驗室里的科學突破。然而&#xff0c;短短幾年后&#xff0c;量子計算已經從理論走向實踐&#xff0c;從實驗室走向產業應用。我們正站在一個全新的計算…

Python 數據可視化之 Matplotlib 庫

在當今數據驅動的時代&#xff0c;數據可視化&#xff08;Data Visualization&#xff09;已成為數據科學、機器學習、金融分析、工程建模等多個領域中不可或缺的一環。數據可視化不僅幫助我們更直觀地理解數據的分布和趨勢&#xff0c;還能輔助決策、展示研究成果以及增強數據…

Makefile 快速入門指南

Makefile 快速入門指南 什么是Makefile? Makefile 是一個自動化構建工具的配置文件&#xff0c;用于管理代碼編譯、測試和清理等任務。它通過定義規則&#xff08;rules&#xff09;來指定文件之間的依賴關系&#xff0c;當源文件改變時&#xff0c;只重新編譯受影響的部分&…

Linux學習--C語言(指針4、結構體)

1.二維數組的傳參int a[2][3] {1, 2, 3, 4, 5, 6};fun(a,2); int fun(int (*p)[3], int len);2.指針數組的傳參char *pastr[5] {NULL};int fun(char **pstr,int len);例子&#xff1a;#include <stdio.h> #include <string.h>int InputArray(char (*p)[32], int …

【STM32】FreeRTOS 消息隊列(五)

在 FreeRTOS 中&#xff0c;任務消息隊列&#xff08;Message Queue&#xff09; 是一種非常關鍵的通信機制&#xff0c;用于在任務之間 傳遞數據、同步事件。 它是實現任務 解耦、異步通信 的核心工具之一&#xff0c;FreeRTOS 的消息隊列是任務之間通信的橋梁。 簡單點說&am…

【筆記】加速 uv 安裝:系統環境變量配置國內鏡像源

使用 Conda 工具鏈創建 UV 本地虛擬環境全記錄——基于《Python 多版本與開發環境治理架構設計》-CSDN博客 命令行創建 UV 環境及本地化實戰演示—— 基于《Python 多版本與開發環境治理架構設計》的最佳實踐-CSDN博客 加速 uv 包安裝&#xff1a;Windows 系統環境變量配置國內…

Three.js 渲染優化處理

基于項目經驗和最佳實踐&#xff0c;以下是渲染優化的具體處理方法&#xff1a; 1. 幾何體與材質優化 使用 BufferGeometry // 推薦&#xff1a;使用 BufferGeometry 替代 Geometry const geometry new THREE.BufferGeometry();合并幾何體 // 將多個幾何體合并為一個以減少繪制…