日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern

發(fā)布時(shí)間:2025/3/12 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#寫在前面

已經(jīng)有一個(gè)禮拜多沒寫博客了,因?yàn)槌磷碓诹恕睹钗丁愤@部小說里,里面講的是一個(gè)廚師蘇秒的故事。現(xiàn)實(shí)中大部分人不會(huì)有她的天分。我喜歡她的性格:總是想著去解決問題,好像從來沒有怨天尤人過。我還喜歡里面那些描寫味道的文字,這會(huì)讓我認(rèn)真對待一日三餐。我還喜歡里面的一種態(tài)度,做事的時(shí)候要認(rèn)真專注。我是個(gè)很容易急躁的人,特別是當(dāng)做自己不太喜歡又不得不做的事的時(shí)候。但是很神奇,伺候花草的時(shí)候,我會(huì)一下子陶醉其中,我對花草有種癡迷的喜愛。等生活無憂的時(shí)候我會(huì)去種花,種蘑菇,像蘇秒一樣陶醉在自己熱愛的事情里。我最喜歡的就是里面蘇秒和回味的感情了,她獨(dú)立,她專注于自己的事情,她有自己的世界,她不患得患失,她活在當(dāng)下,她也會(huì)考慮不太遠(yuǎn)的將來。心之所向,身之所往。看完了我感覺我會(huì)讓自己向自己喜歡的那種生活方式再靠攏一些。

啰嗦完了開始寫今天的博客設(shè)計(jì)模式之裝飾器模式

設(shè)計(jì)模式是一種類層次或者結(jié)構(gòu)的的設(shè)計(jì)方式,是一種解決問題的思維方式,沒有固定的公式

裝飾器模式比較好理解

#引入理解裝飾器

小攤上賣手抓餅,燒餅,火燒一類的都選擇性加 生菜,火腿,牛肉片,雞蛋等

老板做好的一個(gè)餅熱氣騰騰的,不能直接拿給顧客,要問顧客的喜好,加不加其他的東西,顧客說加牛肉片,這時(shí)候旁邊的老板娘在餅上加牛肉片,然后裝入袋子中,然后收錢。

這里面剛剛做好的熱氣騰騰的燒餅或者手抓餅就是具體的構(gòu)件,

加 生菜,火腿,牛肉片,雞蛋等 放入包裝袋 這就是裝飾器。

#定義

抽象構(gòu)件

具體構(gòu)件

抽象裝飾類

具體裝飾類

#角色

裝飾模式,動(dòng)態(tài)地給一個(gè)對象添加一些額外的職責(zé),就增加功能來說,裝飾模式比生成子類更為靈活

#裝飾器模式的優(yōu)點(diǎn)

1.裝飾器類和被裝飾器的類是獨(dú)立的,你不需要懂我,我也不需要懂你,降低耦合度

2.裝飾模式是繼承模式的一個(gè)替代方案

#裝飾器的缺點(diǎn)

1.會(huì)產(chǎn)生很多小對象

#裝飾器的使用場景

1.想給一個(gè)類增加功能,但是又不想修改原來的代碼,可以

2.類的核心功能不變,只是需要添加新的功能時(shí)候

#舉個(gè)例子

#小攤上賣手抓餅和火燒,手抓餅5塊一個(gè),火燒6塊一個(gè),可以加辣椒醬,生菜,雞蛋,牛肉片,火腿片

#辣椒醬免費(fèi),生菜多加1元,雞蛋多加2元,牛肉片多加5元,火腿片多加4元

#顧客根據(jù)自己需要進(jìn)行組合選擇

class Bing:

name=''

price=0.0

def getPrice(self):

return self.price

def setPrice(self,price):

self.price=price

def getName(self):

return self.name

class HandHeldCake(Bing):

def __init__(self):

self.name='手抓餅'

self.price=5

class HuoShao(Bing):

def __init__(self):

self.name='火燒'

self.price=6

class decorator:

def getName(self):

pass

def getPrice(self):

pass

class spicyDecorator(decorator):

def __init__(self,decorator):

self.decorator=decorator

def getName(self):

return '+spicy'

def getPrice(self):

return 0

class vegatableDecorator(decorator):

def __init__(self,decorator):

self.decorator=decorator

def getName(self):

return '+生菜'

def getPrice(self):

return 1

class eggDecorator(decorator):

def __init__(self,decorator):

self.decorator=decorator

def getName(self):

return '+雞蛋'

def getPrice(self):

return 2

class beefDecorator(decorator):

def __init__(self,decorator):

self.decorator=decorator

def getName(self):

return '+牛肉片'

def getPrice(self):

return 5

class peikonDecorator(decorator):

def __init__(self,decorator):

self.decorator=decorator

def getName(self):

return '+火腿片'

def getPrice(self):

return 4

if __name__=='__main__':

hs=HuoShao()

szb=HandHeldCake()

print(hs.getName(),hs.getPrice())

egg=eggDecorator(hs)

print(hs.getName(),egg.getName(),hs.getPrice()+egg.getPrice())

beef=beefDecorator(egg)

print(hs.getName(),egg.getName(),beef.getName(),hs.getPrice()+egg.getPrice()+beef.getPrice())

其他的想要啥自己加就可以了

參考

https://www.cnblogs.com/noteless/p/9603041.html

http://www.imooc.com/article/258816

還參考了其他博客,忘記添加鏈接了

總結(jié)

以上是生活随笔為你收集整理的python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。