装饰模式
前几年学习设计模式的时候,看着别人的分析觉得挺有道理,也能懂
就是自己来的时候,根本无从下手,看着分析出来的代码,也不难
可是最缺乏的就是代码分析的能力,怎么根据实际的业务把代码很巧妙的拆开
并用合适的方式来实现,没有一定的功力确实是难度不小,又不能为了用模式而用模式
而是真正需要的时候,才去用
大话设计模式的特点,就是从自然的生活入手,怎么得出符合要求的代码
每一个场景,都是生活上的一些事情,就可以联系到一些设计模式
让小菜(代表了大多数)这个看似很菜的程序员,先写出一般什么也不怎么考虑
也就是并没有仔细考虑六大原则(单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 )的第一版代码
然后有老鸟针对于这个第一版代码,提出***钻的需求变化,再讲述一些设计原则
小菜有了新的理解,再去写出第二版,直到写出满意的为止
在这个过程中就是我们常见的产品实际的开发过程,甚至开发过程比这个还要差
在这个过程中正常思维写出的代码,与经过思考运用六大原则写出的代码
优缺点对比很明显就能显示出来,以下以装饰模式为切入点
看看老鸟是怎么想的,小菜是怎么想的 作者是怎么想的
事情的起源,也就是需求来源于小菜要去见梦中情人,不知道该怎么穿衣服了
老鸟故意问,看你是什么风格了,穿什么衣服可选的方式太多,顺序,大小,反正这都没有明确规定不能穿
老鸟第一反应是设计模式,根据小菜的穿衣服,让小菜写个穿衣系统
作者看到这个会想到怎么直接用更好的方式,六大原则给写出来
结果想来想去,却不知道如何下手,还得看书他们怎么实现的
小菜不思考,直接就写,我是人嘛,人穿衣服,那穿衣服,穿裤子,穿鞋子等等
都属于方法,干脆就来个
也就都属于人的方法,直接来个最直接,最简单,用老鸟的话说,能表现需要,最不符合面向对象的方式实现了一版
老鸟立马,针对这种实现,提出了一类奇葩需求,我要是超人打扮怎么扮
小菜一想,这得改人这个里面的代码了,违背了开闭原则
立马写了第二版,将人与衣服分离开来,这些变化都是在原来的基础上
构建而来,先有了一个符合客户的功能实现,当客户提出新的需要,发现原有的功能满足不了了,就得去改原来的代码,多次修改,代码越来越好,好的代码都是重构出来的
第二版类图
老鸟一看虽然人与服饰分离,但一看客户端的调用
针对于不同的穿衣顺序,会有不同的效果,对象分离就是面向对象了?
引出了装饰模式的特点
结构图:
小菜看了装饰模式之后,明白了,并针对于装饰的特点,提出自己对装饰模式的理解
小菜在学习了装饰模式之后,又写了出了第三版代码
将饰模式总结:
装饰模式是为已有功能动态地添加更多功能的一种方式,到底怎么用?