装饰器模式 小鱼儿 2022-04-24 08:50 246阅读 0赞 ### **1、初识装饰器模式** ### 装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下: ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ppblhZYW4_size_16_color_FFFFFF_t_70][] * Component为统一接口,也是装饰类和被装饰类的基本类型。 * ConcreteComponent为具体实现类,也是被装饰类,他本身是个具有一些功能的完整的类。 * Decorator是装饰类,实现了Component接口的同时还在内部维护了一个ConcreteComponent的实例,并可以通过构造函数初始化。而Decorator本身,通常采用默认实现,他的存在仅仅是一个声明:我要生产出一些用于装饰的子类了。而其子类才是赋有具体装饰效果的装饰产品类。 * ConcreteDecorator是具体的装饰产品类,每一种装饰产品都具有特定的装饰效果。可以通过构造器声明装饰哪种类型的ConcreteComponent,从而对其进行装饰。 ### **2、最简单的代码实现装饰器模式** ### //基础接口 package main.mode.zsms; /** * 定义一个对象接口,是被装饰类和装饰类的基本类型,可以给这些对象动态添加职责。 */ public interface Component { public void Operation(); } //具体实现类 package main.mode.zsms; /** * 定义了一个具体的对象,是被装饰类,也可以给这个对象添加一些职责。 */ public class ConcreteComponent implements Component{ @Override public void Operation() { System.out.println("This is ConcreteComponent"); } } //装饰类 package main.mode.zsms; /** * 装饰抽象类,实现了Component,从外类来扩展Component类的功能, * 但对于Component来说,是无需知道Decorator存在的。 */ public abstract class Decorator implements Component{ Component component = null; //构造函数,引入component对象 public Decorator(Component component) { this.component = component; } /** * 重写Operation方法 */ @Override public void Operation() { System.out.println("This is Decorator"); if(component != null) { component.Operation(); } } } //具体装饰类 ConcreteDecoratorA package main.mode.zsms; /** * 具体的装饰产品类,起到给Component添加职责的功能 */ public class ConcreteDecoratorA extends Decorator{ //本类的独有属性,区别于ConcreteDecoratorB private String addedState; public ConcreteDecoratorA(Component component) { super(component); } @Override public void Operation() { System.out.println("This is ConcreteDecoratorA"); component.Operation(); addedState = "装饰了A"; System.out.println(addedState); } } //具体装饰类 ConcreteDecoratorB package main.mode.zsms; /** * 具体的装饰产品类,起到给Component添加职责的功能 */ public class ConcreteDecoratorB extends Decorator{ public ConcreteDecoratorB(Component component) { super(component); } @Override public void Operation() { System.out.println("This is ConcreteDecoratorB"); component.Operation(); AddedBehavior(); } private void AddedBehavior() { System.out.println("装饰了B"); } } **测试类** package main.mode.zsms; public class DecoratorTest { public static void main(String[] args) { Component component = new ConcreteComponent(); component.Operation(); System.out.println("---------华丽丽的分割线---------"); Component component1 = new ConcreteDecoratorA(new ConcreteComponent()); component1.Operation(); System.out.println("---------华丽丽的分割线---------"); Component component2 = new ConcreteDecoratorB(new ConcreteComponent()); component2.Operation(); } } 结果 ![70][] 从测试类可以看出,我分了三部分测试 第一部分是没有进行装饰下的情况; 第二、三部分是有装饰的情况。 ![20190420200827541.png][] 应用场景: ![20190420200900437.png][] 转载:[https://blog.csdn.net/zaoan\_2010/article/details/83308891][https_blog.csdn.net_zaoan_2010_article_details_83308891] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0ppblhZYW4_size_16_color_FFFFFF_t_70]: /images/20220217/8bd7ffd4664f434b987185b17b40c3fc.png [70]: /images/20220217/9791be3b746d4d67abfcc55c0f88307d.png [20190420200827541.png]: /images/20220217/c7aaf67938514cdd8267557e0febcf2d.png [20190420200900437.png]: /images/20220217/34cc2737f3544d6d82e02627458c6e78.png [https_blog.csdn.net_zaoan_2010_article_details_83308891]: https://blog.csdn.net/zaoan_2010/article/details/83308891
相关 装饰器模式 装饰器模式就是一种通过组合方式实现扩展的设计模式,装饰器的核心思想是为已有实现类创建多个包装类,由这些新增的包装类完成新需求的扩展。 装饰器模 以你之姓@/ 2022年09月10日 08:18/ 0 赞/ 46 阅读
相关 装饰器模式 装饰器模式 <?php class BaseArticle{ protected $art = null; protected 我会带着你远行/ 2022年07月21日 01:28/ 0 赞/ 213 阅读
相关 装饰器模式 1 <?php 2 //装饰器模式-在不改变原有类的结构上,对类的功能那个作补充 3 4 //武器基类 5 abstract 秒速五厘米/ 2022年06月16日 00:00/ 0 赞/ 198 阅读
相关 装饰器模式 在学装饰器模式的时候,我想到了责任链模式中的级别这个概念,为什么这么说,在一个OA系统中我们会有不同级别(或者说权限范围不同)的管理员,首先我们要明确不同级别的管理员它也是管理 深碍√TFBOYSˉ_/ 2022年05月08日 06:14/ 0 赞/ 220 阅读
相关 装饰器模式 1、初识装饰器模式 装饰器模式,顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。其结构图如下: ![watermark_type_ZmFuZ3poZW 小鱼儿/ 2022年04月24日 08:50/ 0 赞/ 247 阅读
相关 装饰器模式 ![Fpm6gbuGrUYHxqlnbEc-syPtY1Y3][] 什么是装饰器? 装饰器设计模式 > 装饰器模式(Decorator Pattern)允许向一个现有 ╰半橙微兮°/ 2022年04月21日 22:36/ 0 赞/ 236 阅读
相关 装饰器模式 一、基类 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] /----------------------- £神魔★判官ぃ/ 2021年09月30日 08:42/ 0 赞/ 367 阅读
相关 装饰器模式 7.装饰器模式 ![70][] ![70 1][] class Program { static void Main( 拼搏现实的明天。/ 2021年09月16日 23:56/ 0 赞/ 334 阅读
相关 装饰器模式 ![5057999-ef364c6262961125.png][] image.png 意图: 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模 超、凢脫俗/ 2021年09月12日 02:16/ 0 赞/ 374 阅读
相关 装饰器模式 饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种... 小灰灰/ 2020年06月13日 05:56/ 0 赞/ 771 阅读
还没有评论,来说两句吧...