装饰者模式学习心得 Love The Way You Lie 2022-10-20 01:30 108阅读 0赞 # 装饰者模式定义 # 装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能),属于结构型模式。装饰者模式在我们生活中应用也比较多比如煎饼加鸡蛋加香肠。 装饰者在代码程序中适用于以下场景: 1,用于扩展一个类的功能或给一个类添加附加职责。 2,动态的给一个对象添加功能,这些功能可以再动态的撤销。 # 下面我们以一个煎饼的例子 # ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zMDQwOTkyNw_size_16_color_FFFFFF_t_70] ## 创建一个建煎饼的抽象 Battercake 类 ## package com.evan.spring.design.decorator; /** * @author evanYang * @version 1.0 * @date 2021/7/12 16:55 */ public abstract class Battercake { protected abstract String getMsg(); protected abstract int getPrice(); } ## 基本的煎饼(或者叫基础套餐)BaseBattercake ## package com.evan.spring.design.decorator; /** * @author evanYang * @version 1.0 * @date 2021/7/12 17:00 */ public class BaseBattercake extends Battercake{ @Override protected String getMsg() { return "煎饼"; } @Override public int getPrice() { return 5; } } ## 再创建一个扩展套餐的抽象装饰类BatterCakeDecotator类 ## package com.evan.spring.design.decorator; /** * @author evanYang * @version 1.0 * @date 2021/7/12 17:03 */ public abstract class BattercakeDectator extends Battercake{ // 静态代理、委派 private Battercake battercake; protected abstract void doSomething(); public BattercakeDectator(Battercake battercake) { this.battercake=battercake; } @Override protected String getMsg() { return this.battercake.getMsg(); } @Override protected int getPrice() { return this.battercake.getPrice(); } } ## 鸡蛋装饰者类 ## package com.evan.spring.design.decorator; /** * @author evanYang * @version 1.0 * @date 2021/7/12 17:19 */ public class EggDecorator extends BattercakeDectator{ public EggDecorator(Battercake battercake) { super(battercake); } @Override protected void doSomething() { } @Override protected String getMsg(){ return super.getMsg()+"加一个鸡蛋"; } @Override protected int getPrice(){ return super.getPrice()+1; } } ## 香肠装饰者类 ## package com.evan.spring.design.decorator; import org.jcp.xml.dsig.internal.dom.DOMTransform; /** * @author evanYang * @version 1.0 * @date 2021/7/12 17:23 */ public class SausageDecorator extends BattercakeDectator{ public SausageDecorator(Battercake battercake) { super(battercake); } @Override protected void doSomething() { } @Override protected String getMsg(){ return super.getMsg()+"+1根香肠"; } @Override protected int getPrice(){ return super.getPrice()+2; } } ## 测试代码 ## package com.evan.spring.design.decorator; /** * @author evanYang * @version 1.0 * @date 2021/7/12 17:44 */ public class BattercakeTest { public static void main(String[] args) { Battercake battercake; //路边摊买一个煎饼 battercake=new BaseBattercake(); //煎饼有点小,想在加个鸡蛋 battercake=new EggDecorator(battercake); //想在加个鸡蛋 battercake=new EggDecorator(battercake); //想在加个香肠 battercake=new SausageDecorator(battercake); //和静态代理最大的区别就是职责不同 //静态代理不一定要满足is-a的关系 //静态代理会做功能增强,同一个职责变得不一样 System.out.println(battercake.getMsg()+"总价:"+battercake.getPrice()); } } 测试结果 煎饼加一个鸡蛋加一个鸡蛋+1根香肠总价:9 Process finished with exit code 0 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zMDQwOTkyNw_size_16_color_FFFFFF_t_70]: /images/20221004/51b9764768804a22bab94eec80c75f1b.png
相关 装饰者模式学习心得 装饰者模式定义 装饰者模式(Decorator Pattern)是指在不改变原有对象的基础之上,将功能附加到对象上,提供了比继承更有弹性的替代方案(扩展原有对象的功能), Love The Way You Lie/ 2022年10月20日 01:30/ 0 赞/ 109 阅读
相关 装饰者模式 package C\_Decker; /\\ \ 设计原则:类应该对扩展开放,对修改关闭。 \ 装饰者模式:动态地将责任和行为附加到对象上。若要扩展功能,装饰者提供了 骑猪看日落/ 2022年07月12日 12:17/ 0 赞/ 194 阅读
相关 装饰者模式 1.定义: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。使用Decorator模式相比用 快来打我*/ 2022年06月05日 06:14/ 0 赞/ 180 阅读
相关 装饰者模式 作用:可以给一个对象添加职责,可以用来扩展,比继承更有弹性。 装饰者模式 Decorator模式(别名Wrapper):动态将职责附加到对象上 蔚落/ 2022年05月25日 07:49/ 0 赞/ 171 阅读
相关 设计模式-装饰者模式学习 装饰者(Component-Decorator)模式 动态的将责任附加到对象上,想要扩展功能,装饰者提供有别于继承的另外一种选择。 \- 对扩展开放,对修改关闭 客官°小女子只卖身不卖艺/ 2022年05月21日 05:25/ 0 赞/ 152 阅读
相关 装饰者模式 装饰者模式有一个设计非常巧妙的结构,可以为对象动态添加功能。在基本的设计原则中,有一个重要的原则叫做合成/聚合复用原则。根据该原则的思想,代码复用应该尽可能使用委托,而不是继承 红太狼/ 2022年05月14日 02:50/ 0 赞/ 199 阅读
相关 装饰者模式 装饰者模式: 动态的将责任附加到对象上.若要扩展功能,装饰者提供了比继承更加有弹性的代替方案 继承和组合的区别: 继承: 我就是我/ 2022年05月11日 14:12/ 0 赞/ 215 阅读
相关 装饰者模式 TB - top bottom(自上而下) BT - bottom top(自下而上) RL - right left(从右到左) LR - left 亦凉/ 2022年02月18日 11:23/ 0 赞/ 203 阅读
相关 装饰者模式 装饰者模式,在不改变一个对象本身功能的基础上给对象增加额外的新行为。比如,我们到书店买书,在不改变书籍本身的基础上,赠送个书签,或者要个包装袋 装饰者模式(Decora 谁践踏了优雅/ 2021年12月03日 15:25/ 0 赞/ 341 阅读
相关 装饰者模式 一 点睛 我们先来看一个快餐店的例子。 快餐店有炒面、炒饭这些快餐,可以额外附加鸡蛋、火腿、培根这些配菜,当然加配菜需要额外加钱,每个配菜的价钱通常不太一样,那么计算 悠悠/ 2021年07月24日 19:11/ 0 赞/ 375 阅读
还没有评论,来说两句吧...