結構型設計模式。持續更新

結構型 - 外觀

提供了一個統一的接口,用來訪問子系統中的一群接口,從而讓子系統更容易使用。

public class SubSystem {public void turnOnTV() {System.out.println("turnOnTV()");}public void setCD(String cd) {System.out.println("setCD( " + cd + " )");}public void starWatching(){System.out.println("starWatching()");}
}
public class Facade {private SubSystem subSystem = new SubSystem();public void watchMovie() {subSystem.turnOnTV();subSystem.setCD("a movie");subSystem.starWatching();}
}public class Client {public static void main(String[] args) {Facade facade = new Facade();facade.watchMovie();}
}
使用的場景? 
簡化復雜系統:當系統內部由多個子系統組成,并且這些子系統之間相互依賴,外觀模式可以提供一個統一的入口,簡化使用。
解耦客戶端和子系統:當客戶端需要與多個子系統交互時,使用外觀模式可以減少客戶端對子系統的直接依賴,降低耦合度。
隱藏實現細節:當系統內部的實現經常變化,而希望客戶端代碼盡量少受影響時,可以使用外觀模式隱藏這些變化。
提供統一接口:對外暴露一個簡單、穩定的接口,避免讓用戶直接面對復雜的底層系統本質是什么?
外觀模式的本質是 封裝復雜性,提供統一訪問接口。它通過創建一個“門面”(Facade)類,封裝多個子系統的調用,使得客戶端可以通過這個門面類來訪問系統,而不需要了解系統的復雜內部結構。它解決了什么問題?
外觀模式主要解決 降低復雜系統的使用難度和客戶端的依賴性。
降低耦合:客戶端不需要直接依賴多個子系統,而是通過外觀類進行交互。
提高可維護性:當子系統發生變化時,只需要修改外觀類,而不需要修改所有使用子系統的代碼。
增強可讀性:提供一個統一的、高層次的接口,使得代碼更清晰、更易理解。它體現了設計模式中什么原則?
迪米特法則(最少知道原則,LoD):外觀模式減少了對象之間的直接交互,客戶端只需要知道外觀類,而不需要了解具體的子系統。
單一職責原則(SRP):外觀類的職責是提供一個簡化的接口,而不是處理子系統的業務邏輯。
依賴倒置原則(DIP):高層模塊(客戶端)不應該依賴低層模塊(子系統),而是通過外觀類進行依賴。存在的缺陷?
可能導致“上帝類”:如果外觀類封裝過多邏輯,可能會變得過于龐大,形成“上帝類”(God Object),降低可維護性。
降低靈活性:如果客戶端需要訪問子系統的某些高級功能,而外觀類沒有提供接口,那么客戶端仍然需要直接訪問子系統,削弱了外觀模式的意義。
可能引入性能問題:如果外觀類封裝了過多的子系統調用,而每次客戶端調用外觀類時都會觸發所有子系統調用,可能會降低性能。你認為與它相關的設計模式有哪些? 它們之間的區別有哪些?
中介者模式(Mediator):
相似點:都用于降低對象之間的直接交互,提高模塊解耦性。
區別:外觀模式是為多個子系統提供統一入口,而中介者模式則是管理多個對象之間的交互關系,通常用于對象之間的通信,而非子系統之間的封裝。適配器模式(Adapter):
相似點:都對現有系統進行了封裝,以提供更方便的使用方式。
區別:適配器模式用于接口轉換,使不兼容的接口能夠協同工作,而外觀模式只是提供一個簡化的接口,并不改變子系統的行為。代理模式(Proxy):
相似點:都為客戶端提供了一個間接訪問的方式。
區別:代理模式通常用于控制對某個對象的訪問,例如增加權限控制、緩存,而外觀模式的主要目的是簡化接口。*開源架構中哪些使用了這一模式?
Spring Framework
Spring 的 JdbcTemplate 就是外觀模式的一個例子,它封裝了 JDBC 的底層復雜邏輯,使得開發者可以更簡單地執行 SQL 語句。
RestTemplate 也是外觀模式,它對 HTTP 客戶端進行封裝,使得調用 REST API 變得簡單。MyBatis
SqlSession 作為外觀類,封裝了底層數據庫操作,使得開發者可以通過一個簡單的 API 進行數據庫查詢。Dubbo
Dubbo 的 ServiceProxy 代理遠程調用細節,對外提供一個簡潔的調用方式。Log4j/SLF4J
SLF4J 是日志框架的外觀模式,它統一了 Log4j、Logback 等日志實現,提供一個統一的 API,減少了對具體日志實現的依賴。

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

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

相關文章

從零構建大語言模型全棧開發指南:第五部分:行業應用與前沿探索-5.1.2行業落地挑戰:算力成本與數據隱私解決方案

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 從零構建大語言模型全棧開發指南-第五部分:行業應用與前沿探索5.1.2 行業落地挑戰:算力成本與數據隱私解決方案1. 算力成本挑戰與優化策略1.1 算力成本的核心問題1.2 算力優化技術方案2. 數據隱私挑戰…

量子計算與人工智能融合的未來趨勢

最近研學過程中發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊鏈接跳轉到網站人工智能及編程語言學習教程。讀者們可以通過里面的文章詳細了解一下人工智能及其編程等教程和學習方法。 在當今科技飛速發展…

六種光耦綜合對比——《器件手冊--光耦》

目錄 十二、光耦 簡述 基本結構 工作原理 主要特點 應用領域 優勢與局限性 選擇光耦時需要考慮的因素 詳盡闡述 1 柵極驅動光耦 基本結構 工作原理 主要特點 應用領域 選擇柵極驅動光耦時需要考慮的因素 典型產品示例 總結 2 邏輯輸出光耦 基本結構 工作原理 主要特點 應用…

【藍橋杯嵌入式——學習筆記一】2016年第七屆省賽真題重難點解析記錄,閉坑指南(文末附完整代碼)

在讀題過程中發現本次使用的是串口2,需要配置串口2。 但在查看產品手冊時發現PA14同時也是SWCLK。 所以在使用串口2時需要拔下跳線帽去連接CH340。 可能是用到串口2的緣故,在燒錄時發現報了一個錯誤。這時我們要想燒錄得按著復位鍵去點擊燒錄&#xff0c…

三、GPIO

一、GPIO簡介 GPIO(General Purpose Input Output)通用輸入輸出口GPIO引腳電平:0V(低電平)~3.3V(高電平),部分引腳可容忍5V 容忍5V,即部分引腳輸入5V的電壓,…

Java實戰報錯

哪錯了 Preview 在這段Java代碼中,map.put("Cc", 20); 這一行的鍵 "Cc" 被標記為錯誤。這可能是由于以下幾種原因: 鍵值類型不匹配:雖然在你的代碼中沒有顯示出來,但確保 HashMap 的鍵是 String 類型&#xf…

25大唐杯賽道一本科B組知識點大綱(下)

5G/6G網絡技術知識點(10%) 工程概論及通信工程項目實踐(20%) 5G垂直行業應用知識點(20%) ???為重點知識,盡量要過一遍哦 大唐杯賽道一國一備賽思路 大唐杯國一省賽回憶錄--有付出就會有收…

docker的文件系統Overlay2

OverlayFS(Overlay2)文件系統深度解析 Overlay2 是 Docker 默認使用的聯合文件系統(Union Filesystem),用于管理容器鏡像的分層存儲和容器運行時文件系統的合并。它基于 Linux 內核的 OverlayFS 技術,是早…

WebRTC技術簡介及應用場景

寫在前面 本文是參考稀土掘金的文章,整理得出,版權歸原作者所有! 參考鏈接:https://juejin.cn/book/7168418382318927880/section/7171376753263247396 WebRTC(Web Real-Time Communication) 是一項開源技術,允許瀏覽器和移動應用直接進行…

Windows 圖形顯示驅動開發-WDDM 2.1 功能(四)

驅動程序版本控制 圖形適配器或芯片集的驅動程序 DLL 和 SYS 文件必須具有正確格式的文件版本。 驅動程序信息文件 (.inf)、內核模式驅動程序 (.sys) 和用戶模式驅動程序 (.dll) 文件的版本信息必須一致。 此外,.inf 的 [SignatureAttributes] 部分中標識為 PETru…

什么是 StarRocks?核心優勢與適用場景解析

在數據量持續爆發的時代,企業對實時分析的需求日益迫切。例如,電商大促期間的交易監控、廣告投放效果的即時反饋等場景,均要求毫秒級的響應速度。然而,傳統工具如 Hadoop、Hive 等存在明顯短板:復雜查詢性能不足、資源…

Java基礎 4.3

1.對象機制練習 public class Object03 {public static void main(String[] args) {Person a new Person();a.age 10;a.name "小明";Person b;b a;System.out.println(b.name);//小明b.age 200;b null;System.out.println(a.age);//200System.out.println(b.a…

視頻設備軌跡回放平臺EasyCVR綜合智能化,搭建運動場體育賽事直播方案

一、背景 隨著5G技術的發展,體育賽事直播迎來了新的高峰。無論是NBA、西甲、英超、德甲、意甲、中超還是CBA等熱門賽事,都是值得記錄和回放的精彩瞬間。對于體育迷來說,選擇觀看的平臺眾多,但是作為運營者,搭建一套體…

搬磚--貪心+排序的背包

a在上面b在下面->a.v-M-b.m>b.v-M-a.m->剩余率大 所以我先遍歷a&#xff0c;讓a在上面 這就是要考慮貪心排序的01背包 因為它有放的限制條件 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<ll,int>…

《2024年全球DDoS攻擊態勢分析》

從攻擊態勢來看&#xff0c;2024年DDoS攻擊頻次繼續呈增長趨勢&#xff0c;2024年同步增加1.3倍&#xff1b;超大規模攻擊激增&#xff0c;超800Gbps同比增長3.1倍&#xff0c;累計高達771次&#xff0c;且互聯網史上最大帶寬和最大包速率攻擊均被刷新&#xff1b;瞬時泛洪攻擊…

數據分析參考架構詳解

1.數倉方法論 2. 數倉建模參考架構 3.大數據參考架構 4.數據分析參考架構

領馭科技:以微軟Azure Speech技術為核心,驅動翻譯耳機新時代

在全球化的今天&#xff0c;語言不再是溝通的障礙。領馭科技&#xff0c;作為微軟的核心合作伙伴&#xff0c;正引領翻譯耳機行業進入一個全新的發展階段。以時空壺與貿人為例&#xff0c;這兩家公司的翻譯耳機產品憑借其內置的微軟Azure Speech人工智能語音技術&#xff0c;為…

seaweedfs分布式文件系統

seaweedfs https://github.com/seaweedfs/seaweedfs.git go mod tidy go -o bin ./… seaweed占不支持smb服務&#xff0c;只能用fuse的方式mount到本地文件系統 weed master 默認端口&#xff1a;9333&#xff0c;支持瀏覽器訪問 weed volume 默認端口&#xff1a;8080 weed …

說清楚單元測試

在團隊中推行單元測試的時候,總是會被成員問一些問題: 這種測試無法測試數據庫的SQL(或者是ORM)是否執行正確?這種測試好像沒什么作用?關聯的對象要怎么處理呢?…借由本篇,來全面看一看單元測試。 單元測試是軟件開發中一種重要的測試方法,其核心目的是驗證代碼的最小…

服務器磁盤io性能監控和優化

服務器磁盤io性能監控和優化 全文-服務器磁盤io性能監控和優化 全文大綱 磁盤IO性能評價指標 IOPS&#xff1a;每秒IO請求次數&#xff0c;包括讀和寫吞吐量&#xff1a;每秒IO流量&#xff0c;包括讀和寫 磁盤IO性能監控工具 iostat&#xff1a;監控各磁盤IO性能&#xff0c…