【設計模式】——裝飾模式(包裝器模式)

💻博主現有專欄:

????????????????C51單片機(STC89C516),c語言,c++,離散數學,算法設計與分析,數據結構,Python,Java基礎,MySQL,linux,基于HTML5的網頁設計及應用,Rust(官方文檔重點總結),jQuery,前端vue.js,Javaweb開發,設計模式、Python機器學習等
🥏主頁鏈接:

????????????????Y小夜-CSDN博客

目錄

🎯模式動機與定義

🎯模式結構與分析

🎯模式效果與應用


學習推薦:

????????在當今這個飛速發展的信息時代,人工智能(AI)已經成為了一個不可或缺的技術力量,它正在逐步改變著我們的生活、工作乃至整個社會的運作方式。從智能語音助手到自動駕駛汽車,從精準醫療到智慧城市,人工智能的應用已經滲透到了我們生活的方方面面。因此,學習和掌握人工智能相關的知識和技能,對于任何希望在這個時代保持競爭力的個人來說,都已經變得至關重要。

????????然而,人工智能是一個涉及數學、計算機科學、數據科學、機器學習、神經網絡等多個領域的交叉學科,其學習曲線相對陡峭,對初學者來說可能會有一定的挑戰性。幸運的是,隨著互聯網教育資源的豐富,現在有大量優秀的在線平臺和網站提供了豐富的人工智能學習材料,包括視頻教程、互動課程、實戰項目等,這些資源無疑為學習者打開了一扇通往人工智能世界的大門。

????????前些天發現了一個巨牛的人工智能學習網站:前言 – 人工智能教程通俗易懂,風趣幽默,忍不住分享一下給大家。

🎯模式動機與定義

模式動機:

  • 可以在不改變一個對象本身功能的基礎上給對象增加額外的新行為
  • 是一種用于替代繼承的技術,它通過一種無須定義子類的方式給對象動態增加職責,使用對象之間的關聯關系取代類之間的繼承關系
  • 引入了裝飾類,在裝飾類中既可以調用待裝飾的原有類的方法,還可以增加新的方法,以擴展原有類的功能

🎯模式結構與分析

模式結構

裝飾模式包含如下角色:

  • 組件:作為裝飾器類包裝的目標類。
  • 具體組件:實現組件的基礎子類。
  • 裝飾器:一個抽象類,其中包含對組件的引用,并且還重寫了組件接口方法。
  • 具體裝飾器:繼承擴展了裝飾器,并重寫組件接口方法,同時可以添加附加功能。

模式分析

透明裝飾模式

  • 透明(Transparent)裝飾模式:要求客戶端完全針對抽象編程,裝飾模式的透明性要求客戶端程序不應該將對象聲明為具體構件類型或具體裝飾類型,而應該全部聲明為抽象構件類型
  • 對于客戶端而言,具體構件對象和具體裝飾對象沒有任何區別
  • 可以讓客戶端透明地使用裝飾之前的對象和裝飾之后的對象,無須關心它們的區別
  • 可以對一個已裝飾過的對象進行多次裝飾,得到更為復雜、功能更為強大的對象
  • 無法在客戶端單獨調用新增方法addedBehavior()

不透明裝飾模式

  • 半透明(Semi-transparent)裝飾模式:用具體裝飾類型來定義裝飾之后的對象,而具體構件使用抽象構件類型來定義
  • 對于客戶端而言,具體構件類型無須關心,是透明的;但是具體裝飾類型必須指定,這是不透明的
  • 可以給系統帶來更多的靈活性,設計相對簡單,使用起來也非常方便
  • 客戶端使用具體裝飾類型來定義裝飾后的對象,因此可以單獨調用addedBehavior()方法
  • 最大的缺點在于不能實現對同一個對象的多次裝飾,而且客戶端需要有區別地對待裝飾之前的對象和裝飾之后的對象

🎯模式效果與應用

?裝飾模式優點:

  • 對于擴展一個對象的功能,裝飾模式比繼承更加靈活,不會導致類的個數急劇增加
  • 可以通過一種動態的方式來擴展一個對象的功能,通過配置文件可以在運行時選擇不同的具體裝飾類,從而實現不同的行為
  • 可以對一個對象進行多次裝飾
  • 具體構件類與具體裝飾類可以獨立變化,用戶可以根據需要增加新的具體構件類和具體裝飾類,且原有類庫代碼無須改變,符合開閉原則

?裝飾模式缺點:

  • 使用裝飾模式進行系統設計時將產生很多小對象,大量小對象的產生勢必會占用更多的系統資源,在一定程度上影響程序的性能
  • 比繼承更加易于出錯,排錯也更困難,對于多次裝飾的對象,調試時尋找錯誤可能需要逐級排查,較為煩瑣

?在以下情況下可以使用裝飾模式:

  • 在不影響其他對象的情況下,以動態、透明的方式給單個對象添加職責
  • 當不能采用繼承的方式對系統進行擴展或者采用繼承不利于系統擴展和維護時可以使用裝飾模式

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

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

相關文章

數據結構--二叉搜索樹

目錄 二叉搜索樹的概念 二叉樹的實現 結點類 函數接口總覽 實現二叉樹 二叉搜索樹的應用 K模型 KV模型 二叉搜索樹的性能分析 二叉搜索樹的概念 二叉搜索樹(Binary Search Tree,簡稱BST)是一種特殊的二叉樹,其具有以下幾…

數據庫(6)——數據類型

SQL標準常用的數據類型有: 數據類型含義CHAR(n),CHARACTER(n)長度為n的定長字符串VARCHAR(n)最大長度為n的變長字符串CLOB字符串大對象BLOB二進制大對象SMALLINT2字節 短整數INT , INTEGER4字節 整數BIGINT8字節 大整數FLOAT(n)精度為n的浮點…

6818 android 修改開機 logo, 編譯腳本分析

問題: 客戶需要去掉 android5.1 的開機logo. 說明: 對于Android5.1 來說,uboot 與kernel 的logo 是一個。 過程: 其實對于開機logo 的修改很簡單,直接參考廠家手冊就可以了。 這是 android4.4 的開機logo 的修改&…

設計一個代辦功能模塊

目錄 1. 需求分析2. 數據庫設計用戶表(Users Table)代辦任務表(Tasks Table)訂單表(Orders Table)評價表(Reviews Table) 3. 功能實現創建代辦任務前端部分后端部分 接受代辦任務前端…

產品經理-需求收集(二)

1. 什么是需求 指在一定的時期中,一定場景中,無論是心理上還是生理上的,用戶有著某種“需要”,這種“需要”用戶自己不一定知道的,有了這種“需要”后用戶就有做某件事情的動機并促使達到其某種目的,這也就…

FPGA實現多路并行dds

目錄 基本原理 verilog代碼 仿真結果? 基本原理 多路并行dds,傳統DDS的局限性在于輸出頻率有限。根據奈奎斯特采樣定理,單路DDS的輸出頻率應小于系統時鐘頻率的一半。但是在很多地方,要使采樣率保持一致,所以,為了…

【CTF Web】CTFShow web7 Writeup(SQL注入+PHP+進制轉換)

web7 1 阿呆得到最高指示&#xff0c;如果還出問題&#xff0c;就卷鋪蓋滾蛋&#xff0c;阿呆心在流血。 解法 注意到&#xff1a; <!-- flag in id 1000 -->攔截很多種字符&#xff0c;連 select 也不給用了。 if(preg_match("/\|\"|or|\||\-|\\\|\/|\\*|\…

路徑規劃算法的復雜度

通常通過以下指標來衡量&#xff1a; 時間復雜度&#xff1a;這是評估算法執行所需時間的量度。它通常用大O符號表示&#xff0c;給出了算法運行時間隨著輸入規模增長的增長率。例如&#xff0c;一個時間復雜度為O(n^2)的算法在處理大規模輸入時會比時間復雜度為O(n log n)的算…

PostgreSQL的擴展(extensions)-常用的擴展之pg_plan_advsr

PostgreSQL的擴展&#xff08;extensions&#xff09;-常用的擴展之pg_plan_advsr pg_plan_advsr 是 PostgreSQL 社區中的一個擴展&#xff0c;用于分析和改進查詢執行計劃。它能夠自動識別哪些查詢執行緩慢&#xff0c;并提供優化建議&#xff0c;以提高查詢性能。pg_plan_ad…

AI時代存儲大戰,NAND閃存市場風云再起!

隨著人工智能&#xff08;AI&#xff09;相關半導體對高帶寬存儲&#xff08;HBM&#xff09;需求的推動&#xff0c;NAND閃存市場也感受到了這一趨勢的影響。 據《Business Korea》援引行業消息來源稱&#xff0c;NAND閃存市場的競爭正在加劇&#xff0c;而存儲巨頭三星和SK海…

CSP俄羅斯方塊(簡單易懂)

開始將題目理解成了&#xff0c;開始的列應該是從輸入圖案的最左端開始計算&#xff0c;將前面所有的空列都刪掉&#xff0c;代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; const int N 1e410; const int M 1e510; int a[20][20]; int b[5][5];int…

Redis的持久化方式:

Redis提供了兩種數據持久化的方式&#xff1a; RDB 該機制是指在指定的時間間隔內將內存中的數據集快照寫入磁盤。 AOF 該機制將以日志的形式記錄服務器所處理的每一個寫操作。 在Redis服務器啟動之初會讀取文件來重新構建數據庫&#xff0c;以保證啟動后數據庫中的數據是完…

leedcode【203】. 移除鏈表元素——Java解法

Problem: 203. 移除鏈表元素 題目思路解題方法復雜度Code效果 題目 給你一個鏈表的頭節點 head 和一個整數 val &#xff0c;請你刪除鏈表中所有滿足 Node.val val 的節點&#xff0c;并返回 新的頭節點 。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,6,3,4,5,6], val…

OS復習筆記ch6-1

死鎖的原理 定義 一組進程中&#xff0c;其中每個進程因等待事件而阻塞&#xff0c;且所等待的事件只能被這組進程中的另一阻塞進程激發稱之為死鎖。 舉例如下 四個車輛希望緊迫的希望能很快通過&#xff0c;每輛車需要兩個象限的資源&#xff0c;然而四個車都只得到一個象…

golang調用aliyun的語音通話服務,復制直接使用

golang調用aliyun的語音通話服務 通過API使用語音通知/語音驗證碼——阿里云官方文檔SingleCallByTts - 發送語音驗證碼或文本轉語音類型的語音通知入門流程主要參數引入阿里云語音官方SDK-go版本完整代碼通過API使用語音通知/語音驗證碼——阿里云官方文檔 https://help.aliy…

電子電器架構 - AUTOSAR軟件架構介紹

電子電器架構 - AUTOSAR軟件架構介紹 我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 屏蔽力是信息過載時代一個人的特殊競爭力,任何消耗你的人和事,多看一眼都是你的不對。非必要不費力證明自己…

MFC Winsock 類:MFC 中的網絡編程

目錄 概述 一.MFC Winsock 類簡介 1.MFC Winsock 類的主要功能 2.MFC Winsock 類的主要優點 3.MFC Winsock 類的主要缺點 4.MFC Winsock 類的主要類 5.MFC Winsock 類示例 二.CAsyncSocket 類 1.主要功能 異步通信 事件驅動 數據傳輸 套接字選項 2.常用函數 創建…

Maven多環境打包配置

一、啟動時指定環境配置文件 在啟動springboot應用的jar包時&#xff0c;我們可以指定配置文件&#xff0c;通常把配置文件上傳到linux服務器對應jar包的同級目錄&#xff0c;或者統一的配置文件存放目錄 java -jar your-app.jar --spring.config.location/opt/softs/applicat…

matlab 圖像的中值濾波

目錄 一、功能概述1、算法概述2、主要函數3、計算公式二、代碼實現三、結果展示四、參考鏈接本文由CSDN點云俠翻譯,放入付費專欄只為防不要臉的爬蟲。專欄值錢的不是本文,切勿因本文而訂閱。 一、功能概述 1、算法概述 中值濾波是圖像處理中一種常用的非線性運算,用于減少…

間接平差——以水準網平差為例 (python詳細過程版)

目錄 一、原理概述二、案例分析三、代碼實現四、結果展示本文由CSDN點云俠原創,間接平差——以水準網平差為例 (python詳細過程版),爬蟲自重。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲與GPT生成的文章。 一、原理概述 間接平差的函數模型和隨機模型…