網(wǎng)站首頁 編程語言 正文
裝飾器模式
裝飾器模式解決什么問題?
- 增加新功能,且不改變原有功能和代碼
- 選配,根據(jù)不同情況,動態(tài)調(diào)整功能
裝飾器,顧名思義,就是用來裝飾其他實物,增加被裝飾物的功能而不改變被裝飾物。這就像我們買車,同一款車型,有很多功能是選配的,但是車的核心功能不變。我們可以在購買時,根據(jù)需要選配不同的配置。
如何實現(xiàn)?
想象一下,你是一個裝修工,如果要裝飾一輛車,那么你首先需要有一輛車,而且在裝飾過程中,你不能夠改變車原有的功能(接口)。
如類圖所示:
- 核心功能Core和所有裝飾器都必須實現(xiàn)Interface接口
- 所有裝飾器以組合的方式保存接口實例
class Core: def some_action(): pass class Decorator: def __init__(self,core): self.core = core def some_action(): .... self.core.some_action() .....
python 裝飾器語法糖
裝飾器太常用了,python專門的語法糖簡化了裝飾器的使用。最外層函數(shù)接收一個函數(shù)對象并返回內(nèi)層函數(shù),內(nèi)層函數(shù)是正真的執(zhí)行函數(shù)。
# 裝飾器定義 def decorator(func): def wrapper(*args,**kwargs): ..... result = func(*args,**kwargs) .... return result return wrapper # 裝飾器使用 @decorator def func(): pass
雖然形式變了,但是實質(zhì)沒有變:保存接口實例,實現(xiàn)相同的接口。
- 保存接口實例容易理解,因為傳入了函數(shù)func對象。
- 實現(xiàn)相同的接口怎么理解?語法糖@xxxx的操作等價于
func = decorator(func)
,即將內(nèi)層函數(shù)重命名了原函數(shù)名。
原文鏈接:https://juejin.cn/post/7095776102341148708
相關(guān)推薦
- 2022-07-29 Golang?統(tǒng)計字符串中數(shù)字字母數(shù)量的實現(xiàn)方法_Golang
- 2022-08-19 python?return實現(xiàn)匯率轉(zhuǎn)換器教程示例_python
- 2022-07-20 C語言通過三步翻轉(zhuǎn)法實現(xiàn)單詞倒置詳解_C 語言
- 2022-04-02 jquery實現(xiàn)邊框特效_jquery
- 2023-10-16 el-popover在原生table中,彈出多個以及內(nèi)部取消按鈕無效問題
- 2022-12-29 基于R語言時間序列的平穩(wěn)時間序列模型預(yù)測圖文詳解_R語言
- 2022-05-02 Python中pyautogui庫的使用方法匯總_python
- 2022-04-19 C#使用CancellationTokenSource?取消?Task的方法_C#教程
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支