装饰器模式 àì夳堔傛蜴生んèń 2021-09-16 23:16 312阅读 0赞 装饰器模式是为已有的功能动态添加更多功能的一种方式。他把每个要装饰的功能放在单独的类中,并让这个类包装他要装饰的对象。因此,当需要执行特殊行为时,客户代码就可以根据需要有选择的、按顺序的使用装饰功能包装对象了。 **意图:**动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。 **主要解决:**一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。 **何时使用:**在不想增加很多子类的情况下扩展类。 **如何解决:**将具体功能职责划分,同时继承装饰者模式。 **关键代码:** 1、Component 类充当抽象角色,不应该具体实现。 2、修饰类引用和继承 Component 类,具体扩展类重写父类方法。 **应用实例:** 1、孙悟空有 72 变,当他变成"庙宇"后,他的根本还是一只猴子,但是他又有了庙宇的功能。 2、不论一幅画有没有画框都可以挂在墙上,但是通常都是有画框的,并且实际上是画框被挂在墙上。在挂在墙上之前,画可以被蒙上玻璃,装到框子里;这时画、玻璃和画框形成了一个物体。 实例UML图 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdfc2h1eXU_size_16_color_FFFFFF_t_70][] 代码如下: /** * @author Shuyu.Wang * @package:com.shuyu.decorator * @description: * @date 2018-11-09 22:02 **/ @Slf4j public class Person { public Person() { } private String name; public Person(String name) { this.name = name; } public void Show() { log.info("装扮的" + name); } 装饰类: /** * @author Shuyu.Wang * @package:com.shuyu.decorator * @description:服饰类 * @date 2018-11-09 22:06 **/ public class Finery extends Person{ protected Person component; //装饰方法 public void Decorate(Person component){ this.component=component; } @Override public void Show() { if (component!=null){ component.Show(); } } } /** * @author Shuyu.Wang * @package:com.shuyu.decorator * @description:具体服饰类-球鞋 * @date 2018-11-09 22:14 **/ @Slf4j public class Sneakers extends Finery{ @Override public void Show() { log.info("球鞋"); super.Show(); } } /** * @author Shuyu.Wang * @package:com.shuyu.decorator * @description:具体服饰类-T恤类 * @date 2018-11-09 22:10 **/ @Slf4j public class TShirts extends Finery { @Override public void Show() { log.info("大T恤"); super.Show(); } } /** * @author Shuyu.Wang * @package:com.shuyu.decorator * @description:具体服饰类-皮鞋 * @date 2018-11-09 22:19 **/ @Slf4j public class LeatherShoes extends Finery { @Override public void Show() { log.info("皮鞋"); super.Show(); } } /** * @author Shuyu.Wang * @package:com.shuyu.decorator * @description:具体服饰类-垮裤类 * @date 2018-11-09 22:12 **/ @Slf4j public class BigTrouser extends Finery{ @Override public void Show() { log.info("垮裤。。。。"); super.Show(); } } 运行结果如下: 2018-11-09 22:48:02.808 INFO 36536 --- \[ main\] com.shuyu.DecoratorApplicationTests : 第一种打扮 2018-11-09 22:48:02.809 INFO 36536 --- \[ main\] com.shuyu.decorator.TShirts : 大T恤 2018-11-09 22:48:02.809 INFO 36536 --- \[ main\] com.shuyu.decorator.BigTrouser : 垮裤。。。。 2018-11-09 22:48:02.809 INFO 36536 --- \[ main\] com.shuyu.decorator.Sneakers : 球鞋 2018-11-09 22:48:02.810 INFO 36536 --- \[ main\] com.shuyu.decorator.Person : 装扮的小菜 2018-11-09 22:48:02.810 INFO 36536 --- \[ main\] com.shuyu.DecoratorApplicationTests : 第二种打扮 2018-11-09 22:48:02.810 INFO 36536 --- \[ main\] com.shuyu.decorator.TShirts : 大T恤 2018-11-09 22:48:02.810 INFO 36536 --- \[ main\] com.shuyu.decorator.LeatherShoes : 皮鞋 2018-11-09 22:48:02.810 INFO 36536 --- \[ main\] com.shuyu.decorator.Person : 装扮的小菜 git代码地址:[https://github.com/iot-wangshuyu/designpatterns/tree/master/decorator][https_github.com_iot-wangshuyu_designpatterns_tree_master_decorator] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dhbmdfc2h1eXU_size_16_color_FFFFFF_t_70]: /images/20210901/9d5ade1240cd41c395a7752897a1a86c.png [https_github.com_iot-wangshuyu_designpatterns_tree_master_decorator]: https://github.com/iot-wangshuyu/designpatterns/tree/master/decorator
相关 装饰器模式 装饰器模式 <?php class BaseArticle{ protected $art = null; protected 我会带着你远行/ 2022年07月21日 01:28/ 0 赞/ 161 阅读
相关 装饰器模式 1 <?php 2 //装饰器模式-在不改变原有类的结构上,对类的功能那个作补充 3 4 //武器基类 5 abstract 秒速五厘米/ 2022年06月16日 00:00/ 0 赞/ 154 阅读
相关 装饰器模式 在学装饰器模式的时候,我想到了责任链模式中的级别这个概念,为什么这么说,在一个OA系统中我们会有不同级别(或者说权限范围不同)的管理员,首先我们要明确不同级别的管理员它也是管理 深碍√TFBOYSˉ_/ 2022年05月08日 06:14/ 0 赞/ 181 阅读
相关 装饰器模式 1、初识装饰器模式 装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下: ![watermark_type_ZmFuZ3poZW 小鱼儿/ 2022年04月24日 08:50/ 0 赞/ 201 阅读
相关 装饰器模式 ![Fpm6gbuGrUYHxqlnbEc-syPtY1Y3][] 什么是装饰器? 装饰器设计模式 > 装饰器模式(Decorator Pattern)允许向一个现有 ╰半橙微兮°/ 2022年04月21日 22:36/ 0 赞/ 185 阅读
相关 装饰器模式 一、基类 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] /----------------------- £神魔★判官ぃ/ 2021年09月30日 08:42/ 0 赞/ 323 阅读
相关 装饰器模式 7.装饰器模式 ![70][] ![70 1][] class Program { static void Main( 拼搏现实的明天。/ 2021年09月16日 23:56/ 0 赞/ 288 阅读
相关 装饰器模式 装饰器模式是为已有的功能动态添加更多功能的一种方式。他把每个要装饰的功能放在单独的类中,并让这个类包装他要装饰的对象。因此,当需要执行特殊行为时,客户代码就可以根据需要有选择的 àì夳堔傛蜴生んèń/ 2021年09月16日 23:16/ 0 赞/ 313 阅读
相关 装饰器模式 ![5057999-ef364c6262961125.png][] image.png 意图: 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模 超、凢脫俗/ 2021年09月12日 02:16/ 0 赞/ 326 阅读
相关 装饰器模式 饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种... 小灰灰/ 2020年06月13日 05:56/ 0 赞/ 733 阅读
还没有评论,来说两句吧...