💻博主現有專欄:
????????????????C51單片機(STC89C516),c語言,c++,離散數學,算法設計與分析,數據結構,Python,Java基礎,MySQL,linux,基于HTML5的網頁設計及應用,Rust(官方文檔重點總結),jQuery,前端vue.js,Javaweb開發,設計模式、Python機器學習等
🥏主頁鏈接:????????????????Y小夜-CSDN博客
目錄
🎯模式動機與定義
🎯模式結構與分析
🎯模式效果與應用
學習推薦:
????????在當今這個飛速發展的信息時代,人工智能(AI)已經成為了一個不可或缺的技術力量,它正在逐步改變著我們的生活、工作乃至整個社會的運作方式。從智能語音助手到自動駕駛汽車,從精準醫療到智慧城市,人工智能的應用已經滲透到了我們生活的方方面面。因此,學習和掌握人工智能相關的知識和技能,對于任何希望在這個時代保持競爭力的個人來說,都已經變得至關重要。
????????然而,人工智能是一個涉及數學、計算機科學、數據科學、機器學習、神經網絡等多個領域的交叉學科,其學習曲線相對陡峭,對初學者來說可能會有一定的挑戰性。幸運的是,隨著互聯網教育資源的豐富,現在有大量優秀的在線平臺和網站提供了豐富的人工智能學習材料,包括視頻教程、互動課程、實戰項目等,這些資源無疑為學習者打開了一扇通往人工智能世界的大門。
????????前些天發現了一個巨牛的人工智能學習網站:前言 – 人工智能教程通俗易懂,風趣幽默,忍不住分享一下給大家。
🎯模式動機與定義
模式動機:
- 可以在不改變一個對象本身功能的基礎上給對象增加額外的新行為
- 是一種用于替代繼承的技術,它通過一種無須定義子類的方式給對象動態增加職責,使用對象之間的關聯關系取代類之間的繼承關系
- 引入了裝飾類,在裝飾類中既可以調用待裝飾的原有類的方法,還可以增加新的方法,以擴展原有類的功能
🎯模式結構與分析
模式結構
裝飾模式包含如下角色:
- 組件:作為裝飾器類包裝的目標類。
- 具體組件:實現組件的基礎子類。
- 裝飾器:一個抽象類,其中包含對組件的引用,并且還重寫了組件接口方法。
- 具體裝飾器:繼承擴展了裝飾器,并重寫組件接口方法,同時可以添加附加功能。
模式分析
透明裝飾模式
- 透明(Transparent)裝飾模式:要求客戶端完全針對抽象編程,裝飾模式的透明性要求客戶端程序不應該將對象聲明為具體構件類型或具體裝飾類型,而應該全部聲明為抽象構件類型
- 對于客戶端而言,具體構件對象和具體裝飾對象沒有任何區別
- 可以讓客戶端透明地使用裝飾之前的對象和裝飾之后的對象,無須關心它們的區別
- 可以對一個已裝飾過的對象進行多次裝飾,得到更為復雜、功能更為強大的對象
- 無法在客戶端單獨調用新增方法addedBehavior()
不透明裝飾模式
- 半透明(Semi-transparent)裝飾模式:用具體裝飾類型來定義裝飾之后的對象,而具體構件使用抽象構件類型來定義
- 對于客戶端而言,具體構件類型無須關心,是透明的;但是具體裝飾類型必須指定,這是不透明的
- 可以給系統帶來更多的靈活性,設計相對簡單,使用起來也非常方便
- 客戶端使用具體裝飾類型來定義裝飾后的對象,因此可以單獨調用addedBehavior()方法
- 最大的缺點在于不能實現對同一個對象的多次裝飾,而且客戶端需要有區別地對待裝飾之前的對象和裝飾之后的對象
🎯模式效果與應用
?裝飾模式優點:
- 對于擴展一個對象的功能,裝飾模式比繼承更加靈活,不會導致類的個數急劇增加
- 可以通過一種動態的方式來擴展一個對象的功能,通過配置文件可以在運行時選擇不同的具體裝飾類,從而實現不同的行為
- 可以對一個對象進行多次裝飾
- 具體構件類與具體裝飾類可以獨立變化,用戶可以根據需要增加新的具體構件類和具體裝飾類,且原有類庫代碼無須改變,符合開閉原則
?裝飾模式缺點:
- 使用裝飾模式進行系統設計時將產生很多小對象,大量小對象的產生勢必會占用更多的系統資源,在一定程度上影響程序的性能
- 比繼承更加易于出錯,排錯也更困難,對于多次裝飾的對象,調試時尋找錯誤可能需要逐級排查,較為煩瑣
?在以下情況下可以使用裝飾模式:
- 在不影響其他對象的情況下,以動態、透明的方式給單個對象添加職責
- 當不能采用繼承的方式對系統進行擴展或者采用繼承不利于系統擴展和維護時可以使用裝飾模式