結構型:門面模式(外觀模式)

目錄

1、核心思想

2、實現方式

2.1 模式結構

2.2 實現案例

3、優缺點分析

4、適用場景


1、核心思想

目的:通過高層接口(門面類)封裝多個子系統的復雜交互,客戶端只需與門面交互,簡化入口;同時隔離客戶端與子系統,子系統的修改不影響客戶端代碼,實現解耦

舉例

1>?早期的相機使用起來是非常麻煩的,拍照前總是要根據場景情況進行一系列復雜的操作,如對焦、調節閃光燈、調光圈等,非專業人士面對這么一大堆的操作按鈕根本無從下手,拍出來的照片質量也不高。隨著科技發展,出現“傻瓜相機”,用戶再也不必學習那些復雜的參數調節了,只要按下快門鍵就可完成所有操作。

2>?自動擋汽車對離合及換擋操作的封裝

3>?全自動洗衣機對浸泡、漂洗、甩干、排水等一系列操作的封裝

2、實現方式

2.1 模式結構

  • Facade(外觀門面)?:封裝了多個子系統,并將它們整合起來對外提供統一的訪問接口。
  • SubSystemA、SubSystemB、SubSystemC(子系統A、子系統B、子系統C)?:隱藏于門面中的子系統,數量任意,且對外部不可見,可直接調用或者通過門面調用。

2.2 實現案例

假設一個智能家居包含燈光、空調、音響等設備,啟動“觀影模式”需依次執行以下操作:關燈、開空調并調至26℃、開音響并切換到電影模式。

// 子系統
class Light { void off() { /* 關燈 */ } }
class AirConditioner { void on(int temp) { /* 開空調 */ } }
class SoundSystem { void movieMode() { /* 音響電影模式 */ } }// 門面類
class HomeTheaterFacade {private Light light;private AirConditioner ac;private SoundSystem sound;public HomeTheaterFacade() {light = new Light();ac = new AirConditioner();sound = new SoundSystem();}public void startMovie() {light.off();ac.on(26);sound.movieMode();}
}// 客戶端調用
public class Client {public static void main(String[] args) {HomeTheaterFacade facade = new HomeTheaterFacade();facade.startMovie(); // 一鍵啟動觀影模式}
}

3、優缺點分析

優點:

  1. 簡化客戶端使用:隱藏復雜性,提供清晰接口。

  2. 降低耦合:客戶端僅依賴門面,子系統變化時只需調整門面。

  3. 提高靈活性:可自由替換或擴展子系統,不影響客戶端。

缺點:

  1. 過度集中風險:若門面類過于龐大,可能成為“上帝對象”。

  2. 靈活性受限:若需要定制化操作,仍需繞過門面直接調用子系統。

4、適用場景

  • 復雜子系統整合:為遺留系統或第三方庫提供簡潔接口。

  • 分層架構設計:每層通過門面對外暴露功能。

  • 簡化常用流程:如訂單支付、用戶注冊等涉及多步驟的操作。

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

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

相關文章

MidJourney生成王昭君全身像提示詞

漢服王昭君全身像,中國水墨融合工筆畫風格,低飽和度暖色調,絹本設質感: 服飾細節:身著朱紅色曲裾深衣,衣擺拖地三層,金線刺繡鳳凰祥云暗紋,寬袖綴珍珠滾邊,腰間白玉組佩…

GitHub 趨勢日報 (2025年05月21日)

本日報由 TrendForge 系統生成 https://trendforge.devlive.org/ 🌐 本日報中的項目描述已自動翻譯為中文 📈 今日整體趨勢 Top 10 排名項目名稱項目描述今日獲星總星數語言1microsoft/WSLLinux的Windows子系統? 1731? 25184C2virattt/ai-hedge-fundA…

電子電氣架構 --- 細化造車階段流程

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

談談Oracle BUFFER CACHE的命中率

BUFFER CACHE的命中率已成為一個老生常談的話題,在數據庫等待事件出現之前,DBA進行數據庫系統級優化時,往往會首先觀察BUFFER CACHE的命中率。命中率高就意味著數據庫運行正常,很多Oracle官方提供的巡檢腳本都將BUFFER CACHE的命中…

云渲染技術解析與渲酷平臺深度測評:如何實現高效3D創作?

一、云渲染技術核心原理 1.1 分布式計算架構 云渲染的本質是通過多節點并行計算實現效率突破。以動畫渲染為例,一個30秒的動畫通常包含720幀(按24幀/秒計算),傳統單機需要連續處理所有幀,而云渲染可將任務拆解為720個…

JavaScript-DOM-02

自定義屬性&#xff1a; ? <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

Kind方式部署k8s單節點集群并創建nginx服務對外訪問

資源要求 請準備好doker環境&#xff0c;盡量用比較新的版本。我的docker環境如下 docker 環境&#xff1a; Docker version 20.10.21, build 20.10.21-0ubuntu1~18.04.3 安裝kind kind表現上就是一個二進制程序&#xff0c;下載對應版本并增加執行權限即可&#xff1a; cu…

MySQL備份恢復:數據安全的終極指南

引言 各位數據庫愛好者們好&#xff01;今天我們要深入探討MySQL數據庫的"生命保險"——備份與恢復策略 &#x1f6e1;?。在數據即資產的時代&#xff0c;任何數據丟失都可能造成災難性后果。本教程將帶你全面掌握從邏輯備份到物理備份&#xff0c;從二進制日志恢復…

id分頁遍歷數據漏行問題

令入參id為0 while(true){ select * from table where id>#{id} order by id asc limit 100; 取結果集中最大id作為下次查詢的入參 其他操作 } 這個算法一般沒問題&#xff0c;但在主從數據系統中&#xff0c;主庫寫&#xff0c;查詢從庫遍歷數據時&#xff0c;出現了…

OpenCV級聯分類器

概念 OpenCV 級聯分類器是一種基于 Haar 特征、AdaBoost 算法和級聯結構的目標檢測方法&#xff0c;通過多階段篩選快速排除非目標區域&#xff0c;實現高效實時檢測&#xff08;如人臉、行人等&#xff09;。 加載級聯分類器 // 加載級聯分類器CascadeClassifier cascade;// …

C++ inline 內聯函數

一、定義與設計初衷 inline 函數是 C 中通過 減少函數調用開銷 優化程序效率的機制。其核心設計初衷是 取代 C 語言中宏定義&#xff08;#define&#xff09;&#xff0c;同時解決宏的以下缺陷&#xff1a; 類型安全問題&#xff1a;宏僅進行文本替換&#xff0c;無法進行參數…

uniapp-商城-64-后臺 商品列表(商品修改---頁面跳轉,深淺copy應用,遞歸調用等)

完成了商品的添加和展示&#xff0c;下面的文字將繼續進行商品頁面的處理&#xff0c;主要為商品信息的修改的頁面以及后天邏輯的處理。 本文主要介紹了商品信息修改頁面的實現過程。首先&#xff0c;頁面布局包括編輯和刪除功能&#xff0c;未來還可添加上架和下架按鈕。通過c…

digitalworld.local: VENGEANCE靶場

1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.182&#xff0c;靶場IP192.168.23.3 3&#xff0c;對靶機進行端口服務探測 nmap -sV -T4 -p- -A 192.168.23.3 端口號 協…

微店平臺店鋪商品接口開發指南

微店API獲取店鋪所有商品實現方案 以下是使用微店開放平臺API獲取店鋪所有商品的完整實現代碼&#xff0c;包含請求封裝、分頁處理和錯誤處理機制。 點擊獲取key和secret from weidian_api import WeidianAPI # 配置你的微店應用憑證 APP_KEY "your_app_key" APP_…

Proxmox 主機與虛擬機全部斷網問題排查與解決記錄

Proxmox 主機與虛擬機全部斷網問題排查與解決記錄 關鍵詞&#xff1a;Proxmox、e1000e、板載網卡、斷網、網絡橋接、Hardware Unit Hang、網卡掛死 背景 近期在使用 Proxmox VE 管理服務器時&#xff0c;遇到一個奇怪的問題&#xff1a;每當在某個虛擬機中執行某些操作&#x…

SpringBoot整合MQTT實戰:基于EMQX構建高可靠物聯網通信,從零到一實現設備云端雙向對話

一、引言 隨著物聯網(IoT)技術的快速發展&#xff0c;MQTT(Message Queuing Telemetry Transport)協議因其輕量級、低功耗和高效的特點&#xff0c;已成為物聯網設備通信的事實標準。本文將詳細介紹如何使用SpringBoot框架整合MQTT協議&#xff0c;基于開源MQTT代理EMQX實現設…

zData X zStorage 為什么采用全閃存架構而非混閃架構?

點擊藍字 關注我們 最近有用戶問到 zData X 的存儲底座 zStorage 分布式存儲為什么采用的是全閃存架構而非混閃架構&#xff1f;主要原因還是在于全閃存架構在性能和可靠性方面具有更顯著的優勢。zData X 的上一代產品 zData 的早期版本也使用了SSD盤作為緩存的技術架構&#x…

Fiddler抓包教程->HTTP和HTTPS基礎知識

1.簡介 有的伙伴可能會好奇&#xff0c;不是講解和分享抓包工具,怎么這里開始講解HTTP和HTTPS協議了。這是因為你對HTTP協議越了解&#xff0c;你就能越掌握Fiddler的使用方法&#xff0c;反過來你越使用Fiddler&#xff0c;就越能幫助你了解HTTP協議。 Fiddler無論對開發人員…

虛擬機NAT模式獲取不到ip

虛擬機NAT模式獲取不到ip 如圖所示 解決方案&#xff1a; 先查看NetworkManager是否啟動 systemctl status NetworkManager如果沒啟動就啟動一遍 使用DHCP手動獲取一遍ip sudo dhclient ens33成功得到ip 這是后遇到了另一個問題&#xff0c;ip釋放后&#xff0c;不能自動…

Sass 基礎用法速覽

Sass 基礎用法速覽 目錄 Sass 基礎用法速覽1. 什么是 Sass&#xff1f;2. 安裝 Sass2.1 使用 npm 安裝&#xff08;推薦&#xff09;2.2 使用 Dart Sass&#xff08;官方推薦&#xff09;2.3 使用 GUI 工具 3. Sass 基本用法3.1 編譯 Sass 4. Sass 語法詳解4.1 變量4.2 嵌套4.3…