python 设计模式之装饰器模式 Decorator Pattern

#写在前面html

已经有一个礼拜多没写博客了,由于沉醉在了《妙味》这部小说里,里面讲的是一个厨师苏秒的故事。现实中大部分人不会有她的天分。我喜欢她的性格:老是想着去解决问题,好像历来没有怨天尤人过。我还喜欢里面那些描写味道的文字,这会让我认真对待每日三餐。我还喜欢里面的一种态度,作事的时候要认真专一。我是个很容易急躁的人,特别是当作本身不太喜欢又不得不作的事的时候。可是很神奇,伺候花草的时候,我会一会儿陶醉其中,我对花草有种痴迷的喜好。等生活无忧的时候我会去种花,种蘑菇,像苏秒同样陶醉在本身热爱的事情里。我最喜欢的就是里面苏秒和回味的感情了,她独立,她专一于本身的事情,她有本身的世界,她不患得患失,她活在当下,她也会考虑不太远的未来。心之所向,身之所往。看完了我感受我会让本身向本身喜欢的那种生活方式再靠拢一些。python

 

啰嗦完了开始写今天的博客设计模式之装饰器模式设计模式

设计模式是一种类层次或者结构的的设计方式,是一种解决问题的思惟方式,没有固定的公式less

装饰器模式比较好理解设计

 

 #引入理解装饰器

小摊上卖手抓饼,烧饼,火烧一类的都选择性加 生菜,火腿,牛肉片,鸡蛋等htm

老板作好的一个饼热气腾腾的,不能直接拿给顾客,要问顾客的喜爱,加不加其余的东西,顾客说加牛肉片,这时候旁边的老板娘在饼上加牛肉片,而后装入袋子中,而后收钱。对象

这里面刚刚作好的热气腾腾的烧饼或者手抓饼就是具体的构件,blog

加 生菜,火腿,牛肉片,鸡蛋等 放入包装袋 这就是装饰器。继承

 

#定义

抽象构件get

具体构件

抽象装饰类

具体装饰类

 

#角色

装饰模式,动态地给一个对象添加一些额外的职责,就增长功能来讲,装饰模式比生成子类更为灵活

#装饰器模式的优势

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

 还参考了其余博客,忘记添加连接了

相关文章
相关标签/搜索