結構型:二. 外觀模式(facade)

来源:https://www.cnblogs.com/ourongxin/archive/2022/03/22/16041476.html
-Advertisement-
Play Games

外觀模式是什麼 外觀模式是一種結構性設計模式,它能為程式庫、框架或者其他複雜的子系統提供一個統一的高層界面,使子系統更容易使用。外觀模式就是聚合多個介面實現,對外只暴露單個介面。隱藏子系統的複雜性。調用方不關心實現步驟。 為什麼要用外觀模式 當子系統提供的功能很多,而我們子需要多個子系統中很少的幾個 ...


外观模式是什么

外观模式是一种结构性设计模式,它能为程序库、框架或者其他复杂的子系统提供一个统一的高层界面,使子系统更容易使用。外观模式就是聚合多个接口实现,对外只暴露单个接口。隐藏子系统的复杂性。调用方不关心实现步骤。

为什么要用外观模式

当子系统提供的功能很多,而我们子需要多个子系统中很少的几个功能时。这时我们可以用外观模式,让我们不必关注与子系统众多的方法。或者子系统相互调用复杂时,外观模式我们不必清楚子系统中众多类之间的相互调用关系。

外观模式怎么实现

电脑启动需要依次启动电源、主板、CPU、内存、硬盘。当然我们也可以用外观模式封装一下,把它们都封装到一起。当然这个例子比较简单,子系统之间没有相互调用。

package facade

import "fmt"

// 电源
type Power struct{}

func (Power) start() {
    fmt.Println("启动电源。。。")
}

// 主板
type Motherboard struct{}

func (Motherboard) start() {
    fmt.Println("启动主板。。。")
}

// CPU
type CPU struct{}

func (CPU) start() {
    fmt.Println("启动CPU。。。")
}

// 内存
type Memory struct{}

func (Memory) start() {
    fmt.Println("启动内存管理。。。")
}

// 硬盘
type Disk struct{}

func (Disk) start() {
    fmt.Println("启动硬盘。。。")
}

// 开机键
type Computer struct{}

func (Computer) Start() {
    new(Power).start()
    new(Motherboard).start()
    new(CPU).start()
    new(Memory).start()
    new(Disk).start()
}

优点

  1. 提高易用性:外观模式使子系统更容易使用,客户端更容易使用子系统功能。
  2. 重点突出,降低复杂度:外观模式更能体现子系统的核心功能,重点突出,一定程度降低系统整体复杂度。
  3. 减少依赖:客户端调用外观模式提供的统一高层界面,比客户端单独调用众多子系统减少依赖,降低子系统与调用者之间的耦合度。

缺点

  1. 外观类可能耦合的类较多,使外观类变的臃肿,且不易维护。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 在 《一篇帶你用 VuePress + Github Pages 搭建博客》中,我們使用 VuePress 搭建了一個博客,最終的效果查看:TypeScript 中文文檔。 本篇講講 SEO 優化中的 Open Graph protocol。 meta 標簽 如果我們打開思否任意一篇文章,比如 ...
  • 語義化是指使用恰當語義的html標簽,讓頁面具有良好的結構和含義。 比如p標簽就代表段落;article代表正文內容等。 語義化的好處有以下兩點: 開發者友好:使用語義類標簽增強了可讀性,開發者也能夠清晰地看出網頁的結構,也更為便於團隊的開發和維護; 機器友好:帶有語義的文字表現力豐富,更適合搜索引 ...
  • 本人是重度書簽使用者,多年收藏積累的書簽有4萬多。 雖然我對書簽的文件夾進行了結構化的整理,但是每當添加新的書簽時候,還是很難快速的找到相關的文件夾。 因此開發這個小插件可以快速的對書簽進行添加和整理。 ...
  • 開源項目其實有一個成熟周期,這個周期大概是三年左右,自React框架在2013年發佈並引爆了前端框架的大潮,這個屬於前端的周期就此開始了。之後在2015年5月開源的React Native又開啟了屬於Web移動前端的周期,15-16年,18-19年,21-22年正好就是屬於移動前端的三個爆發點。 ...
  • 描述: 本篇文章為了記錄日常生活中或者項目中經常使用到的JS方法,會長期記錄... 數組中的方法 1.map和forEach方法 map 參數為回調函數,得到一個新數組 forEach 修改原數組,不會產生新數組 2.pop和push方法(棧結構) push 向數組末尾添加一個元素或者多個元素,會改 ...
  • 前言 在 《一篇帶你用 VuePress + Github Pages 搭建博客》中,我們使用 VuePress 搭建了一個博客,最終的效果查看:TypeScript 中文文檔。 本篇講講 SEO 中的一些細節優化。 1. 設置全局的 title、description、keywords // co ...
  • word-break: normal; // 此值為瀏覽器的預設屬性:以單詞為單位; keep-all 這個值由於相容性差,很少用;word-wrap: normal; // 此值為瀏覽器的預設屬性:以單詞為單位; 純中文:自動換行,一個漢字看做一個單詞; 純英文或純數字:看做一個單詞,不換行; 遇 ...
  • 經過前面兩天的學習,已經對Node.js有了一個初步的認識,今天繼續學習其他內容,並加以整理分享,如有不足之處,還請指正。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...