《设计模式》读书笔记:装饰者模式

家里的小面摊或多或少都有点名气,最早的记忆中,他们会使用小铁片了来识别你点的面要什么浇头,比如三角的表示牛肉,圆形的代表杂酱的.后来,随着时代的进步,他们也开始使用更方便的电子化的记账方式.

对于那时还没接触过面向对象编程的我来说,我理所当然的认为就是这个记账系统有一个表,记录着二两牛肉面多少钱,三两牛肉面多少钱.

嗯,对于这种小型店面来说,这确实是即节省成本,又能很大程度上方便使用的做法,这个系统只需要给店面的操作人员提供一个设置物品名以及对应价格的功能就行了,一个面摊,最多也就30多种浇头顶天了,即使一个一个的设置,也是花不了多少时间的,而面摊几十年来,浇头的种类也没什么太大变化,所以,这种过程化的设计,并不会对功能产生很坏的影响,而且操作人员的成本也很低.

将上面过程化设计转换成面向对象的设计,无非也就是Noodle为父类,NoodleWithBeef之类的子类,这个简单的面向对象设计就能运行了.

但是,问题就出在这世界上有一个句话叫做,“量变引起质变”,《设计模式》这本书在这个例子上引用了山寨的星巴克(星巴兹咖啡).

想象一下,当一种咖啡可以有3,或者更多4种的调料的时候,上面那种为小面馆所设计的系统将会带来非常糟糕的体验,

CoffeeAWithSeasoningB,CoffeeAWithSeasoningC,CoffeeBWithSeasoningBCD,这么写下去,显然是一个类的大爆发.

《设计模式》又提出了一个新的想法,将是否添加调料为bool值添加做类的成员变量....额,在这种大规模的系统中,这显然也算得上是个糟糕的设计,意味着,你将这些都写死了,明显违背了设计模式的原则.

所以,《设计模式》提出了装饰者模式.

装饰者和被装饰者都基于同一个父类,装饰者都拥有被装饰者的引用,这样,被装饰者就像一个核心,而装饰者这一层层的包裹着这个核心.因为每个装饰者又是独立存在的,所以其行为是可以定制的,改变某一类装饰者的行为并不会影响到其他装饰者的行为.

用《设计模式》中提的例子来说,就是当某个调料要改变价格的时候,只需要改变该调料的价格,这个模式依然能正常运行.


同时,《设计模式》也提到,只有在针对抽象组件类型编程时,才不会因为装饰者而受到影响.但是,如果的确针对特定的具体组件编程,就应该重新考虑应用架构,以及装饰者是否合适.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值