揭秘23種設計模式的藝術與技巧之結構型

結構型模式:優化軟件結構的策略

  1. 代理模式(Proxy Pattern)
    代理模式就像一個經紀人,代表真實對象進行操作。比如,在網絡訪問中,我們可能會通過代理服務器來訪問外部網站。在軟件中,當一個對象由于某些原因(如訪問權限限制、創建開銷大等)不能直接訪問另一個對象時,可以通過代理對象來間接訪問。代理對象可以在訪問真實對象前后添加一些額外的邏輯,如權限驗證、緩存處理等。
  2. 適配器模式(Adapter Pattern)
    想象你有一個歐式插頭的電器,但家里只有美式插座,這時候就需要一個轉換插頭(適配器)來讓電器正常使用。在軟件中,適配器模式用于將一個類的接口轉換成客戶希望的另一個接口。當我們需要使用一個現有的類,但它的接口與我們的需求不兼容時,就可以使用適配器模式。例如,有一個舊的支付接口,新的業務系統需要與之集成,但新系統使用的是不同的接口規范,這時候就可以創建一個適配器類,將舊支付接口適配成新系統可以使用的接口。
  3. 橋接模式(Bridge Pattern)
    橋接模式將抽象部分與實現部分分離,使它們可以獨立變化。以手機為例,手機有不同的品牌(抽象部分),每個品牌又可以有不同的操作系統(實現部分)。如果不使用橋接模式,可能每個品牌的手機都要和每個操作系統進行組合,導致類的數量急劇增加。而使用橋接模式,將品牌和操作系統分離,通過一個橋接接口進行關聯,這樣當新增一個品牌或者一個操作系統時,只需要添加相應的類,而不需要修改其他類的代碼,提高了系統的可維護性和擴展性。
  4. 裝飾器模式(Decorator Pattern)
    裝飾器模式就像給蛋糕添加不同的裝飾,在不改變對象本身的基礎上,動態地給對象添加新的功能。比如,一個簡單的咖啡對象,我們可以通過裝飾器為它添加牛奶、糖、奶油等不同的配料,從而得到不同口味的咖啡。在軟件中,當需要在運行時給對象添加功能,而又不想通過繼承的方式來擴展類時,裝飾器模式是一個很好的選擇。它通過創建一個裝飾器類,將被裝飾的對象作為成員變量,在裝飾器類中可以調用被裝飾對象的方法,并添加新的功能。
  5. 外觀模式(Facade Pattern)
    外觀模式提供了一個統一的接口,用來訪問子系統中的一群接口。就像電腦的開機鍵,按下它就可以啟動電腦的各個硬件組件,而用戶不需要了解每個硬件組件是如何啟動的。在軟件中,當一個系統由多個復雜的子系統組成,客戶端需要與這些子系統進行交互時,使用外觀模式可以提供一個簡單的接口,隱藏子系統的復雜性,降低客戶端與子系統之間的耦合度。
  6. 享元模式(Flyweight Pattern)
    享元模式旨在復用對象,減少對象的創建數量,以提高系統的性能。比如在一個圍棋游戲中,棋盤上有大量的棋子,每個棋子的顏色、形狀等屬性是相同的,只是位置不同。我們可以將這些相同屬性的棋子共享,只創建少量的棋子對象,通過改變它們的位置來表示不同的棋子。在軟件中,當有大量相似對象存在,且這些對象的創建和銷毀開銷較大時,享元模式可以有效地減少內存占用,提高系統的運行效率。
  7. 組合模式(Composite Pattern)
    組合模式用于將對象組合成樹形結構,以表示 “部分 - 整體” 的層次關系。例如,在一個文件系統中,文件夾可以包含文件和子文件夾,文件和文件夾都可以看作是節點,通過組合模式可以方便地對整個文件系統進行遍歷、操作等。組合模式使得客戶端可以統一對待單個對象和組合對象,簡化了代碼的實現。

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

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

相關文章

PyTorch圖像數據轉換為張量(Tensor)并進行歸一化的標準操作

transform ToTensor() 是 PyTorch 中用于將圖像數據轉換為張量(Tensor)并進行歸一化的標準操作,以下是對其功能的逐層解析及關鍵細節:核心功能總結功能描述類型轉換將 PIL Image / numpy 數組 → PyTorch Tensor (dtype: torch.f…

HarmonyOS學習

一,DevEoc Studio基本內容學習項目工程目錄entry 默認的項目入口模塊ets 界面相關文件(目前都放入pages文件內即可)resource資源文件,配置文件index.est默認文件’ ‘開頭的一般為裝飾器,修飾功能,來約定后…

【大前端】Vue 和 React 主要區別

Vue 與 React 的主要區別 在前端開發領域,Vue 和 React 是兩大最受歡迎的框架/庫。盡管它們都可以幫助我們構建現代化的 Web 應用,但在設計理念、開發方式、生態系統等方面有許多不同。本文將從多個角度對兩者進行對比。 目錄 框架與庫的定位核心理念…

高級RAG策略學習(五)——llama_index實現上下文窗口增強檢索RAG

LlamaIndex上下文窗口實現詳解 概述 本文檔詳細講解基于LlamaIndex框架實現的上下文窗口RAG系統,重點分析關鍵步驟、語法結構和參數配置。 1. 核心導入與環境配置 1.1 必要模塊導入 from llama_index.core import Settings from llama_index.llms.dashscope import …

Doris 數據倉庫例子

基于 Apache Doris 構建數據倉庫的方案和具體例子。Doris 以其高性能、易用性和實時能力,成為構建現代化數據倉庫(特別是 OLAP 場景)的優秀選擇。一、為什么選擇 Doris 構建數據倉庫?Doris(原名 Palo)是一個…

WebRTC進階--WebRTC錯誤Failed to unprotect SRTP packet, err=9

文章目錄 原因分析 SRTP Anti-Replay 機制 客戶端源碼 err=9 的定義: 為什么會觸發 replay_fail ? 解決方向 原因分析 SRTP Anti-Replay 機制 SRTP 收包時會用一個 Replay Window(64/128個序列號大小)檢查 seq 是否合理。 如果你構造的恢復包 recover_seq 比當前接收窗口…

Web服務與Nginx詳解

文章目錄前言一、Web 概念1.1 Web 的基本概念1.1.1 特點1.2 B/S 架構模型1.3 Web 請求與響應過程1.4 靜態資源與動態資源1.5 Web 的發展階段1.6 實驗:搭建最小 Web 服務1.6.1 實驗目標1.6.2 實驗步驟1.7 小結二、HTTP 與 HTTPS 協議2.1 HTTP 與 HTTPS 的區別2.2 HTT…

CC-Link IE FB 轉 DeviceNet 實現歐姆龍 PLC 與松下機器人在 SMT 生產線錫膏印刷環節的精準定位控制

案例背景在電子制造行業,SMT(表面貼裝技術)生產線對設備的精準控制要求極高。某電子制造企業的 SMT 生產線中,錫膏印刷機、SPI(錫膏厚度檢測儀)等前段設備采用了基于 CC-Link IE FB 主站的歐姆龍 NJ 系列 P…

IP5326_BZ 支持C同口輸入輸出的移動電源芯片 2.4A的充放電電流 支持4LED指示燈

IP5326 是一款集成升壓轉換器、鋰電池充電管理、電池電量指示的多功能電源管理 SOC,為移動電源提供完整的電源解決方案。得益于 IP5326 的高集成度與豐富功能,使其在應用時僅需極少的外圍器件,并有效減小整體方案的尺寸,降低 BOM 成本。IP532…

若依基礎學習

若依基礎學習 1.修改數據庫密碼以及連接名: RuoYi-Vue-master\ruoyi-admin\src\main\resources\application-druid.yml2.各個文件作用: ruoyi-admin (主啟動)├── ruoyi-framework (框架核心)│ ├── ruoyi-common (通用工具)│ └── ruoyi-sy…

靶向肽Dcpep

名稱:靶向肽Dcpep三字母序列:NH2-Phe-Tyr-Pro-Ser-Tyr-His-Ser-Thr-Pro-Gln-Arg-Pro-OH單字母序列:NH2-FYPSYHSTPQRP-OH分子式:C69H94N18O19分子量:1479.62備注:僅供科研,不用于人體簡述&#x…

華為在國內搞的研發基地有多野?標桿游學帶你解鎖“研發界頂流”

寶子們!原來華為在國內有這么多“寶藏研發基地”,之前總覺得遙不可及走進深圳坂田總部——1.3平方公里的園區,走進去就像進了“科技版大觀園”,21層研發主樓看著就很有氣勢,天鵝湖邊的路全用科學家名字命名&#xff0c…

linux缺頁中斷頻繁怎么定位

1,怎么看內存是否有缺頁中斷 查看日志: dmesg | grep “do fault” perf record -e page-faults -g -p <PID> 系統級監控: 使用 vmstat 查看全局缺頁中斷(si/so 表示換入/換出頁數) vmstat 1 # 每秒刷新,觀察 si/so 列 iostat顯示磁盤使用情況,舉例iostat -x …

06-Hadoop生態系統組件(2)

4. 數據查詢組件 4.1 Apache Hive詳解 from typing import Dict, List, Any, Optional, Tuple, Union from dataclasses import dataclass from enum import Enum from datetime import datetime import re import jsonclass HiveTableType(Enum):"""Hive表類型…

【自動化實戰】Python操作Excel/WORD/PDF:openpyxl與docx庫詳解

在現代辦公環境中&#xff0c;我們經常需要處理各種文檔格式&#xff0c;如Excel表格、Word文檔和PDF文件。手動處理這些文檔不僅耗時&#xff0c;而且容易出錯。Python提供了多個強大的庫來實現文檔處理的自動化&#xff0c;本文將重點介紹如何使用openpyxl和docx庫來操作Exce…

構建安全的自動駕駛:軟件測試中的編碼規范與AI驗證

自動駕駛不再只是未來想象&#xff0c;它正在以驚人的速度走向現實。但這一變革也帶來了軟件開發的全新命題。與傳統車輛不同&#xff0c;自動駕駛依賴復雜的AI模型、傳感系統和車載決策單元&#xff0c;必須應對更多現實環境的不確定性。在強監管、高風險、快節奏的背景下&…

2025高教社數學建模國賽C題 - NIPT的時點選擇與胎兒的異常判定(完整參考論文)

基于機器學習與統計模型的NIPT檢測優化與異常判定問題研究 摘要 非侵入性產前檢測(NIPT)作為一種無創安全的胎兒染色體異常篩查技術,在現代產前醫療中發揮著重要作用,其準確性與檢測時機及異常判定的科學性直接影響臨床決策。然而,男胎Y染色體濃度受孕周數、孕婦BMI等多…

一種基于注解與AOP的Spring Boot接口限流防刷方案

1. 添加Maven依賴<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupI…

代碼隨想錄二刷之“貪心算法”~GO

簡單題目 1.455. 分發餅干 - 力扣&#xff08;LeetCode&#xff09; func findContentChildren(g []int, s []int) int {sort.Ints(g)sort.Ints(s)index : 0for i : 0;i<len(s);i{if index < len(g) && g[index] < s[i]{index}}return index }感悟&#xff…

Pod自動重啟問題排查:JDK 17 EA版本G1GC Bug導致的應用崩潰

Pod自動重啟問題排查:JDK 17 EA版本G1GC Bug導致的應用崩潰 問題背景 在生產環境中,我們遇到了一個嚴重的穩定性問題:應用Pod頻繁自動重啟,導致服務不穩定。通過深入分析JVM崩潰日志,最終定位到是JDK 17 EA版本中G1GC的一個已知Bug導致的。 問題現象 1. Pod重啟表現 應…