Golang|外觀模式和具體邏輯

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 最終返回的是Document的切片,然后取得Bytes自己再去做反序列化拿到文檔的各種詳細信息。

  • 外觀模式是一種結構型設計模式,它的目的是為復雜的子系統提供一個統一的高層接口,讓外部調用者(客戶端)可以更簡單地使用子系統,而不需要了解子系統內部的細節。
  • 動機:當系統內部有很多復雜的模塊、接口時,直接使用會非常麻煩。外觀模式可以對外提供一個簡化接口,讓客戶端可以很容易地訪問系統的功能。
  • 核心作用:封裝復雜性,提供簡單接口。
  • 特點:
    • 降低子系統之間的耦合度
    • 客戶端只需要跟外觀對象交互
    • 不影響子系統內部功能的擴展
// 外觀模式結構圖+----------------+|    Client       |+--------+--------+|v+--------+--------+|      Facade      |   (外觀類,統一對外接口)+--------+--------+|+------------------+------------------+|                  |                  |v                  v                  v
+------------+    +--------------+    +--------------+
| SubSystem1 |    |  SubSystem2   |    |  SubSystem3   |
| (Power)    |    | (HardDrive)   |    | (OperatingSys)|
+------------+    +--------------+    +--------------+
// 電腦開機示例package mainimport "fmt"// 子系統:電源管理
type Power struct{}func (p *Power) On() {fmt.Println("Power is ON.")
}
func (p *Power) Off() {fmt.Println("Power is OFF.")
}// 子系統:硬盤管理
type HardDrive struct{}func (h *HardDrive) ReadData() {fmt.Println("HardDrive is reading data.")
}// 子系統:操作系統管理
type OperatingSystem struct{}func (os *OperatingSystem) Boot() {fmt.Println("Operating System is booting up.")
}
func (os *OperatingSystem) Shutdown() {fmt.Println("Operating System is shutting down.")
}// 外觀(Facade)
type ComputerFacade struct {power    *PowerhardDrive *HardDriveos       *OperatingSystem
}// 創建外觀對象
func NewComputerFacade() *ComputerFacade {return &ComputerFacade{power:    &Power{},hardDrive: &HardDrive{},os:       &OperatingSystem{},}
}// 開機流程
func (c *ComputerFacade) Start() {fmt.Println("Starting the computer...")c.power.On()c.hardDrive.ReadData()c.os.Boot()fmt.Println("Computer is ready to use.")
}// 關機流程
func (c *ComputerFacade) Shutdown() {fmt.Println("Shutting down the computer...")c.os.Shutdown()c.power.Off()fmt.Println("Computer is turned off.")
}func main() {computer := NewComputerFacade()computer.Start()fmt.Println()computer.Shutdown()
}Starting the computer...
Power is ON.
HardDrive is reading data.
Operating System is booting up.
Computer is ready to use.Shutting down the computer...
Operating System is shutting down.
Power is OFF.
Computer is turned off.
  • 子系統 Power、HardDrive、OperatingSystem 提供各自復雜的功能。
  • ComputerFacade 封裝了子系統的調用順序,提供了簡單的 Start() 和 Shutdown() 方法。
  • 外部調用者(main函數)只需要關心 ComputerFacade,不需要了解具體步驟。
  • 外觀模式 = 復雜系統的門面 ? 把一堆子系統打包成一個簡單接口,統一對外提供服務。
  • 隱藏復雜性:客戶端不用知道各個子系統的復雜調用過程。
  • 降低耦合:客戶端只依賴外觀類,子系統改了也不會直接影響客戶端。
  • 更清晰的結構:便于維護和擴展,比如以后增加“自檢模塊”,只需要在 Facade 中增加調用,不需要改客戶端。

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

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

相關文章

2025年3月AGI技術月評|技術突破重構數字世界底層邏輯

〔更多精彩AI內容,盡在 「魔方AI空間」 ,引領AIGC科技時代〕 本文作者:貓先生 ——當「無限照片」遇上「可控試穿」,我們正在見證怎樣的智能革命? 被低估的進化:開源力量改寫游戲規則 當巨頭們在AGI賽道…

可解釋人工智能(XAI):讓機器決策透明化

在人工智能(AI)技術飛速發展的今天,AI 系統已經廣泛應用于金融、醫療、交通等多個關鍵領域。然而,隨著 AI 系統的復雜性不斷增加,尤其是深度學習模型的廣泛應用,AI 的“黑箱”問題逐漸凸顯。AI 系統的決策過…

【Go語言】ORM(對象關系映射)庫

github.com/jinzhu/gorm 是 Go 語言中一個非常流行的 ORM(對象關系映射)庫,用于簡化與關系型數據庫的交互。以下是關于它的關鍵信息: 核心特點 全功能 ORM 支持主流數據庫:MySQL、PostgreSQL、SQLite、SQL Server 等。…

大數據企業實驗室管理的痛點 質檢LIMS系統在大數據企業的應用

在數字化轉型浪潮中,大數據企業正面臨海量數據管理與質量控制的雙重挑戰。實驗室作為數據生產的核心環節,其檢測流程的規范化、數據處理的智能化直接關系到企業數據資產的可靠性。質檢LIMS(實驗室信息管理系統)通過整合實驗室資源…

在Arduino U8g2庫中顯示中文的方法

U8g2庫支持中文顯示,但需要手動添加中文字體或使用內置的有限中文字符。以下是具體實現方法: 方法一 使用U8g2內置的中文字體(不推薦) 缺點:內置字體支持的漢字較少,可能無法顯示所有需要的字符。不推薦。…

自動駕駛分級

一、美國 SAE J3016 Taxonomy and Definitions for Terms Related to Driving Automation Systems for On-Road Motor Vehicles(2021) 1、駕駛自動化級別(Levels of Driving Automation) 共分為 6 個級別,從 無自動化(0&#…

工業園區工廠企業數字IP廣播應急呼叫對講系統:數字IP廣播極大提升工廠企業管理效率與應急響應效能

工業園區工廠企業數字IP廣播應急呼叫對講系統:數字IP廣播極大提升工廠企業管理效率與應急響應效能 北京海特偉業科技有限公司任洪卓發布于2025年4月28日 在數字化轉型浪潮下,IP應急廣播呼叫對講廣播系統憑借其網絡化、智能化、融合化、多元化等優勢,已…

DNS主從同步及解析

DNS 域名解析原理 域名系統的層次結構 :DNS 采用分層樹狀結構,頂級域名(如.com、.org、.net 等)位于頂層,下面是二級域名、三級域名等。例如,在域名 “www.example.com” 中,“com” 是頂級域名…

再看 BBR 到 BBRv3 的公平性改進

從看一篇論文開始:Performance Evaluation of TCP BBRv3 in Networks with Multiple Round Trip Times,結論比較悲觀: 雖然 BBRv2/3 試圖解決 BBRv1 的公平性問題,但結果依舊不夠理想,BBR 的迭代依舊任重而道遠。 BB…

locust壓力測試

安裝 pip install locust驗證是否安裝成功 locust -V使用 網上的教程基本上是前幾年的,locust已經更新了好幾個版本,有點過時了,在此做一個總結 啟動 默認是使用瀏覽器進行設置的 # 使用瀏覽器 locust -f .\main.py其他參數 Usage: locust […

優先隊列和單調隊列(雙端隊列實現的)

這里寫自定義目錄標題 一、優先隊列與單調隊列二、優先隊列2.1 概念2.2 增刪查 判空2.3 示例代碼 三、雙端隊列四、單調隊列4.1 單調遞增隊列4.2 單調遞減隊列 一、優先隊列與單調隊列 二、優先隊列 2.1 概念 一種特殊的隊列,它與普通隊列的主要區別在于元素的出…

如何在idea中寫spark程序

在 IntelliJ IDEA 中編寫 Spark 程序是一個高效且便捷的方式,以下是一個詳細的步驟指南,幫助你在 IntelliJ IDEA 中創建和運行 Spark 程序。 一、環境準備 安裝 Java: 確保已經安裝了 JDK 1.8 或更高版本。可以通過以下命令檢查:…

BERT BERT

BERT ***** 2020年3月11日更新:更小的BERT模型 ***** 這是在《深閱讀的學生學得更好:預訓練緊湊模型的重要性》(arXiv:1908.08962)中提到的24種較小規模的英文未分詞BERT模型的發布。 我們已經證明,標準的BERT架構和…

SpringBoot啟動警告:OpenJDK 64-Bit Server VM warning

問題描述 以Debug模式啟動Spring boot項目之后,日志打印:OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended, 警告信息 解決方案:配置VM opt…

“該虛擬機似乎正在使用中“

當某一天打開虛擬機突然彈出"該虛擬機似乎正在使用中"。 遇到這種問題的解決方法很簡單,出現這種問題是因為錯誤關閉虛擬機導致,當我們點擊獲取所有權時發現不能解決問題。這里分享一種簡單的解決方法。 打開虛擬機的文件目錄 找到lck文件夾下…

【CSS】層疊,優先級與繼承(三):超詳細繼承知識點

目錄 繼承一、什么是繼承?2.1 祖先元素2.2 默認繼承/默認不繼承 二、可繼承屬性2.1 字體相關屬性2.2 文本相關屬性2.3 列表相關屬性 三、不可繼承屬性3.1 盒模型相關屬性3.2 背景相關屬性 四、屬性初始值4.1 根元素4.2 屬性的初始值4.3 得出結論 五、強制繼承5.1 in…

Android LiveData關鍵代碼

1、observer方法 public void observe(NonNull LifecycleOwner owner, NonNull Observer<? super T> observer) {assertMainThread("observe");if (owner.getLifecycle().getCurrentState() DESTROYED) {// ignorereturn;}LifecycleBoundObserver wrapper …

Docker-高級使用

前言 書接上文Docker-初級安裝及使用_用docker安裝doccano-CSDN博客&#xff0c;我們講解了Docker的基本操作&#xff0c;下面我們講解的是高級使用&#xff0c;請大家做好準備&#xff01; 大家如果是從初級安裝使用過來的話&#xff0c;建議把之前鏡像和搭載的容器數據卷里面…

Spring Boot常用注解詳解:實例與核心概念

Spring Boot常用注解詳解&#xff1a;實例與核心概念 前言 Spring Boot作為Java領域最受歡迎的快速開發框架&#xff0c;其核心特性之一是通過注解&#xff08;Annotation&#xff09;簡化配置&#xff0c;提高開發效率。注解驅動開發模式讓開發者告別繁瑣的XML配置&#xff…

TRO再添新案 TME再拿下一熱門IP,涉及Paddington多個商標

4月2日和4月8日&#xff0c;TME律所代理Paddington & Company Ltd.對熱門IP Paddington Bear帕丁頓熊的多類商標發起維權&#xff0c;覆蓋文具、家居用品、毛絨玩具、紡織用品、游戲、電影、咖啡、填充玩具等領域。跨境賣家需立即排查店鋪內的相關產品&#xff01; 案件基…