装饰模式

Posted 李行周

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰模式相关的知识,希望对你有一定的参考价值。

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

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

 

都属于方法,干脆就来个

 

 

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

 

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

 

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

 

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

 

 

 

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

 

第二版类图

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

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

 

引出了装饰模式的特点

结构图:

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

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

将饰模式总结:

 

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

 

以上是关于装饰模式的主要内容,如果未能解决你的问题,请参考以下文章

装饰模式(Decorator Pattern)

装饰器模式

设计模式之-装饰器模式

23设计模式装饰模式

设计模式---装饰者模式

设计模式之装饰模式