首页 > 代码库 > 装饰模式

装饰模式

前几年学习设计模式的时候,看着别人的分析觉得挺有道理,也能懂

 

就是自己来的时候,根本无从下手,看着分析出来的代码,也不难

 

可是最缺乏的就是代码分析的能力,怎么根据实际的业务把代码很巧妙的拆开

 

并用合适的方式来实现,没有一定的功力确实是难度不小,又不能为了用模式而用模式

 

而是真正需要的时候,才去用

 

大话设计模式的特点,就是从自然的生活入手,怎么得出符合要求的代码

 

每一个场景,都是生活上的一些事情,就可以联系到一些设计模式

 

让小菜(代表了大多数)这个看似很菜的程序员,先写出一般什么也不怎么考虑

 

也就是并没有仔细考虑六大原则(单一职责原则 里氏替换原则 依赖倒置原则 接口隔离原则 迪米特法则 开闭原则 )的第一版代码

 

然后有老鸟针对于这个第一版代码,提出刁钻的需求变化,再讲述一些设计原则

 

小菜有了新的理解,再去写出第二版,直到写出满意的为止

 

在这个过程中就是我们常见的产品实际的开发过程,甚至开发过程比这个还要差

 

在这个过程中正常思维写出的代码,与经过思考运用六大原则写出的代码

 

优缺点对比很明显就能显示出来,以下以装饰模式为切入点

 

看看老鸟是怎么想的,小菜是怎么想的 作者是怎么想的

 

事情的起源,也就是需求来源于小菜要去见梦中情人,不知道该怎么穿衣服了

 

老鸟故意问,看你是什么风格了,穿什么衣服可选的方式太多,顺序,大小,反正这都没有明确规定不能穿

 

老鸟第一反应是设计模式,根据小菜的穿衣服,让小菜写个穿衣系统

 

作者看到这个会想到怎么直接用更好的方式,六大原则给写出来

 

结果想来想去,却不知道如何下手,还得看书他们怎么实现的

 

小菜不思考,直接就写,我是人嘛,人穿衣服,那穿衣服,穿裤子,穿鞋子等等

 

都属于方法,干脆就来个

技术分享

 

 

也就都属于人的方法,直接来个最直接,最简单,用老鸟的话说,能表现需要,最不符合面向对象的方式实现了一版

 

老鸟立马,针对这种实现,提出了一类奇葩需求,我要是超人打扮怎么扮

 

小菜一想,这得改人这个里面的代码了,违背了开闭原则

 

立马写了第二版,将人与衣服分离开来,这些变化都是在原来的基础上

 

 

 

构建而来,先有了一个符合客户的功能实现,当客户提出新的需要,发现原有的功能满足不了了,就得去改原来的代码,多次修改,代码越来越好,好的代码都是重构出来的

 

第二版类图

技术分享

老鸟一看虽然人与服饰分离,但一看客户端的调用

技术分享

针对于不同的穿衣顺序,会有不同的效果,对象分离就是面向对象了?

 

引出了装饰模式的特点

技术分享

结构图:

技术分享

小菜看了装饰模式之后,明白了,并针对于装饰的特点,提出自己对装饰模式的理解

技术分享

技术分享

小菜在学习了装饰模式之后,又写了出了第三版代码

技术分享

将饰模式总结:

 

装饰模式是为已有功能动态地添加更多功能的一种方式,到底怎么用?

技术分享

 

装饰模式