python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern
#寫在前面
已經有一個禮拜多沒寫博客了,因為沉醉在了《妙味》這部小說里,里面講的是一個廚師蘇秒的故事。現實中大部分人不會有她的天分。我喜歡她的性格:總是想著去解決問題,好像從來沒有怨天尤人過。我還喜歡里面那些描寫味道的文字,這會讓我認真對待一日三餐。我還喜歡里面的一種態度,做事的時候要認真專注。我是個很容易急躁的人,特別是當做自己不太喜歡又不得不做的事的時候。但是很神奇,伺候花草的時候,我會一下子陶醉其中,我對花草有種癡迷的喜愛。等生活無憂的時候我會去種花,種蘑菇,像蘇秒一樣陶醉在自己熱愛的事情里。我最喜歡的就是里面蘇秒和回味的感情了,她獨立,她專注于自己的事情,她有自己的世界,她不患得患失,她活在當下,她也會考慮不太遠的將來。心之所向,身之所往。看完了我感覺我會讓自己向自己喜歡的那種生活方式再靠攏一些。
啰嗦完了開始寫今天的博客設計模式之裝飾器模式
設計模式是一種類層次或者結構的的設計方式,是一種解決問題的思維方式,沒有固定的公式
裝飾器模式比較好理解
#引入理解裝飾器
小攤上賣手抓餅,燒餅,火燒一類的都選擇性加 生菜,火腿,牛肉片,雞蛋等
老板做好的一個餅熱氣騰騰的,不能直接拿給顧客,要問顧客的喜好,加不加其他的東西,顧客說加牛肉片,這時候旁邊的老板娘在餅上加牛肉片,然后裝入袋子中,然后收錢。
這里面剛剛做好的熱氣騰騰的燒餅或者手抓餅就是具體的構件,
加 生菜,火腿,牛肉片,雞蛋等 放入包裝袋 這就是裝飾器。
#定義
抽象構件
具體構件
抽象裝飾類
具體裝飾類
#角色
裝飾模式,動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更為靈活
#裝飾器模式的優點
1.裝飾器類和被裝飾器的類是獨立的,你不需要懂我,我也不需要懂你,降低耦合度
2.裝飾模式是繼承模式的一個替代方案
#裝飾器的缺點
1.會產生很多小對象
#裝飾器的使用場景
1.想給一個類增加功能,但是又不想修改原來的代碼,可以
2.類的核心功能不變,只是需要添加新的功能時候
#舉個例子
#小攤上賣手抓餅和火燒,手抓餅5塊一個,火燒6塊一個,可以加辣椒醬,生菜,雞蛋,牛肉片,火腿片
#辣椒醬免費,生菜多加1元,雞蛋多加2元,牛肉片多加5元,火腿片多加4元
#顧客根據自己需要進行組合選擇
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
還參考了其他博客,忘記添加鏈接了
總結
以上是生活随笔為你收集整理的python中的装饰器、装饰器模式_python 设计模式之装饰器模式 Decorator Pattern的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库MySQL相关操作||创建数据库、
- 下一篇: 遗传算法python实现_Python遗