发布于2019-08-06 11:08 阅读(637) 评论(0) 点赞(2) 收藏(1)
装饰模式(Decorator)动态的给一个对象添加一些额外的职责,就增加的功能来说,装饰模式比生成子类更灵活(继承的方式,子类和父类存在耦合关系)。
假设现在有一个电脑城的装机报价单打印程序。程序需要根据用户不同的配置需求打印不同的的报价单。尝试写一段代码来呈现这个逻辑。
`
class Quotation:
def show(self):
print('牛屁哄哄电脑公司装机报价单:')
print('-' * 20)
class HardwareConfiguration():
def __init__(self):
self._quotation = None
def set_quotation(self, quo):
self._quotation = quo
def show(self):
pass
class MainBoard(HardwareConfiguration):
def __init__(self):
super().__init__()
def show(self):
self._quotation.show()
print('技嘉Giga 9AP-TX: 1000')
class Memory(HardwareConfiguration):
def __init__(self):
super().__init__()
def show(self):
self._quotation.show()
print('KingSton 8G : 800')
class CPU(HardwareConfiguration):
def __init__(self):
super().__init__()
def show(self):
self._quotation.show()
print('AMD 32Core : 800')
class DisplayAdaper(HardwareConfiguration):
def __init__(self):
super().__init__()
def show(self):
self._quotation.show()
print('ATI XXXX : 1200')
class Printer(HardwareConfiguration):
def __init__(self):
super().__init__()
def show(self):
self._quotation.show()
print('Printer : 1000')
if __name__ == '__main__':
quo = Quotation()
cpu = CPU()
mem = Memory()
main_board = MainBoard()
printer = Printer()
#装饰过程1
cpu.set_quotation(quo)
mem.set_quotation(cpu)
main_board.set_quotation(mem)
main_board.show()
#装饰过程2
printer.set_quotation(quo)
main_board.set_quotation(printer)
cpu.set_quotation(main_board)
mem.set_quotation(cpu)
mem.show()
`
执行输出:
C:\Python36\python.exe D:/练习/设计模式复习/装饰器模式/decorator_rf.py
牛屁哄哄电脑公司装机报价单:
--------------------
AMD 32Core : 800
KingSton 8G : 800
技嘉Giga 9AP-TX: 1000
牛屁哄哄电脑公司装机报价单:
--------------------
Printer : 1000
技嘉Giga 9AP-TX: 1000
AMD 32Core : 800
KingSton 8G : 800
Process finished with exit code 0
分析:
Quotation是报价单基本内容打印。程序可以根据不同用户的不同PC配置需求,去跟Quotation对象去添加装饰。CPU,Memory…每一种硬件的对象都是一种装饰。这样每一种装饰类就可以独立变化,没有相互耦合。
1.装饰模式是为已有功能动态添加功能的一种方式。
2.当需要执行特殊行为时,客户端代码就可以在运行时根据需要有选择地,按顺序的使用装饰功能包装对象了。
3.有效的把类的核心职责和装饰功能分开,而且可以去除相关类中重负的装饰逻辑。
作者:好难受
链接:https://www.pythonheidong.com/blog/article/8164/695bf9e122a2a384f55c/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!