# gupaoedu-vip-pattern-decorator **Repository Path**: lichaoying/gupaoedu-vip-pattern-decorator ## Basic Information - **Project Name**: gupaoedu-vip-pattern-decorator - **Description**: java架构师_设计模式_装饰器模式 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2022-01-08 - **Last Updated**: 2022-01-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java架构师-设计模式-装饰器模式 标签(空格分隔): java架构师-设计模式 --- ## 装饰器模式:***包装,同宗同源*** spring 可参考 BufferedReader InputStream OutputStream HttpHeadResponseDecorator ## 应用场景 装饰者模式(DecoratorPattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。装饰者模式在我们生活中应用也比较多如给煎饼加鸡蛋;给蛋糕加上一些水果;给房子装修等,为对象扩展一些额外的职责。装饰者在代码程序中适用于以下场景: 1、用于扩展一个类的功能或给一个类添加附加职责。 2、动态的给一个对象添加功能,这些功能可以再动态的撤销。 来看一个这样的场景,上班族白领其实大多有睡懒觉的习惯,每天早上上班都是踩点,于是很多小伙伴为了多赖一会儿床都不吃早餐。那么,也有些小伙伴可能在上班路上碰到卖煎饼的路边摊,都会顺带一个到公司茶水间吃早餐。卖煎饼的大姐可以给你的煎饼加鸡蛋,也可以加香肠 ![image_1ddb8rgq95fc6rh1dkl1000chq9.png-889kB][1] 为了加深印象,我们再来看一个应用场景。是否还有小伙伴记得我们上次讲个的适配器模式,为了实现新功能与老功能兼容,创建一个新的类继承已有的类,实现功能扩展, ## 装饰者模式和适配器模式对比 装饰者和适配器模式都是包装模式(WrapperPattern),装饰者也是一种特殊的代理模式 ![image_1ddb9ndp12j5dgr193l1vcl9tim.png-250.5kB][2] ## 装饰者模式在源码中的应用 装饰器模式在源码中也应用得非常多,在 JDK 中体现最明显的类就是 IO 相关的类,如BufferedReader、InputStream、OutputStream,看一下常用的 InputStream 的类结构图 ![image_1ddb9pl9a2c1tseuc57tf165013.png-376.9kB][3] 装饰者模式的优缺点 ## 优点: 1、装饰者是继承的有力补充,比继承灵活,不改变原有对象的情况下动态地给一个对象 扩展功能,即插即用。 2、通过使用不同装饰类以及这些装饰类的排列组合,可以实现不同效果。 3、装饰者完全遵守开闭原则。 ## 缺点: 1、会出现更多的代码,更多的类,增加程序复杂性。 2、动态装饰时,多层装饰时会更复杂。 那么装饰者模式我们就讲解到这里,希望小伙伴们认真体会,加深理解。 [1]: http://static.zybuluo.com/countryday163/monw1g9t5t1obzjqrs6v9ygx/image_1ddb8rgq95fc6rh1dkl1000chq9.png [2]: http://static.zybuluo.com/countryday163/ldwy8yu6v6iotmrsamhotx5l/image_1ddb9ndp12j5dgr193l1vcl9tim.png [3]: http://static.zybuluo.com/countryday163/51ihulkn927vqabprrsj3oas/image_1ddb9pl9a2c1tseuc57tf165013.png