網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
裝飾器模式
裝飾器模式解決什么問(wèn)題?
- 增加新功能,且不改變?cè)泄δ芎痛a
- 選配,根據(jù)不同情況,動(dòng)態(tài)調(diào)整功能
裝飾器,顧名思義,就是用來(lái)裝飾其他實(shí)物,增加被裝飾物的功能而不改變被裝飾物。這就像我們買(mǎi)車(chē),同一款車(chē)型,有很多功能是選配的,但是車(chē)的核心功能不變。我們可以在購(gòu)買(mǎi)時(shí),根據(jù)需要選配不同的配置。
如何實(shí)現(xiàn)?
想象一下,你是一個(gè)裝修工,如果要裝飾一輛車(chē),那么你首先需要有一輛車(chē),而且在裝飾過(guò)程中,你不能夠改變車(chē)原有的功能(接口)。
如類(lèi)圖所示:
- 核心功能Core和所有裝飾器都必須實(shí)現(xiàn)Interface接口
- 所有裝飾器以組合的方式保存接口實(shí)例
class Core: def some_action(): pass class Decorator: def __init__(self,core): self.core = core def some_action(): .... self.core.some_action() .....
python 裝飾器語(yǔ)法糖
裝飾器太常用了,python專(zhuān)門(mén)的語(yǔ)法糖簡(jiǎn)化了裝飾器的使用。最外層函數(shù)接收一個(gè)函數(shù)對(duì)象并返回內(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
雖然形式變了,但是實(shí)質(zhì)沒(méi)有變:保存接口實(shí)例,實(shí)現(xiàn)相同的接口。
- 保存接口實(shí)例容易理解,因?yàn)閭魅肓撕瘮?shù)func對(duì)象。
- 實(shí)現(xiàn)相同的接口怎么理解?語(yǔ)法糖@xxxx的操作等價(jià)于
func = decorator(func)
,即將內(nèi)層函數(shù)重命名了原函數(shù)名。
原文鏈接:https://juejin.cn/post/7095776102341148708
相關(guān)推薦
- 2022-04-30 C語(yǔ)言實(shí)現(xiàn)考勤管理系統(tǒng)_C 語(yǔ)言
- 2022-12-02 python3中join和格式化的用法小結(jié)_python
- 2022-03-15 feign.RetryableException: Read timed out executing
- 2022-06-09 Python中Matplotlib的點(diǎn)、線(xiàn)形狀、顏色以及繪制散點(diǎn)圖_python
- 2023-04-08 C#以太網(wǎng)Sockets服務(wù)器設(shè)計(jì)實(shí)現(xiàn)_C#教程
- 2022-09-04 Linux?sed工具的使用及工作原理_linux shell
- 2022-12-03 React前端解鏈表數(shù)據(jù)結(jié)構(gòu)示例詳解_React
- 2022-12-05 Python中的內(nèi)置函數(shù)isdigit()_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支