装饰器模式 以你之姓@ 2022-09-10 08:18 45阅读 0赞 装饰器模式就是一种通过组合方式实现扩展的设计模式,装饰器的核心思想是为已有实现类创建多个包装类,由这些新增的包装类完成新需求的扩展。 装饰器模式使用的是组合方式,相较于继承这种静态的扩展方式,装饰器模式可以在运行时根据系统状态,动态决定为一个实现类添加哪些扩展功能。 原理图如下: ![watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBA5oCd57u055qE5rex5bqm_size_20_color_FFFFFF_t_70_g_se_x_16][] **Component 接口**:已有的业务接口,是整个功能的核心抽象,定义了 Decorator 和 ComponentImpl 这些实现类的核心行为。 **ComponentImpl 实现类**:实现了上面介绍的 Component 接口,其中实现了 Component 接口最基础、最核心的功能,也就是被装饰的、原始的基础类。 **Decorator 抽象类**:所有装饰器的父类,实现了 Component 接口,其核心不是提供新的扩展能力,而是封装一个 Component 类型的字段,也就是被装饰的目标对象。需要注意的是,这个被装饰的对象可以是 ComponentImpl 对象,也可以是 Decorator 实现类的对象,之所以这么设计,就是为了实现下图的装饰器嵌套。这里的 DecoratorImpl1 装饰了 DecoratorImpl2,DecoratorImpl2 装饰了 ComponentImpl,经过了这一系列装饰之后得到的 Component 对象,除了具有 ComponentImpl 的基础能力之外,还拥有了 DecoratorImpl1 和 DecoratorImpl2 的扩展能力。 **DecoratorImpl1、DecoratorImpl2**:Decorator 的具体实现类,它们的核心就是在被装饰对象的基础之上添加新的扩展功能。 示例: public interface Shape { void draw(); } public class CommonShapImpl implements Shape { @Override public void draw() { System.out.println("draw a line"); } } public abstract class ShapeDecorator implements Shape { protected Shape shape; public ShapeDecorator(Shape shape) { this.shape = shape; } public void draw() { if (shape != null) shape.draw(); } } public class CycleDecoratorImpl extends ShapeDecorator { public CycleDecoratorImpl(Shape shape) { super(shape); } public void draw() { shape.draw(); drawCycle(); } private void drawCycle() { System.out.println("Draw a cycle"); } } public class RectangleDecoratorImpl extends ShapeDecorator { public RectangleDecoratorImpl(Shape shape) { super(shape); } public void draw() { shape.draw(); drawRectangle(); } private void drawRectangle() { System.out.println("Draw a rectangle"); } } public class DecoratorPatternDemo { public static void main(String[] args) { Shape commonShape = new CommonShapImpl(); ShapeDecorator cycleDraw = new CycleDecoratorImpl(commonShape); ShapeDecorator rectangleDraw = new RectangleDecoratorImpl(commonShape); System.out.println("==========================="); System.out.println("Common draw:"); commonShape.draw(); System.out.println("==========================="); System.out.println("Circle draw:"); cycleDraw.draw(); System.out.println("==========================="); System.out.println("Rectangle draw:"); rectangleDraw.draw(); } } [watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBA5oCd57u055qE5rex5bqm_size_20_color_FFFFFF_t_70_g_se_x_16]: /images/20220829/eac8782f4c2a49baa7f8caef4806d9bb.png
相关 装饰器模式 装饰器模式就是一种通过组合方式实现扩展的设计模式,装饰器的核心思想是为已有实现类创建多个包装类,由这些新增的包装类完成新需求的扩展。 装饰器模 以你之姓@/ 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 赞/ 246 阅读
相关 装饰器模式 ![Fpm6gbuGrUYHxqlnbEc-syPtY1Y3][] 什么是装饰器? 装饰器设计模式 > 装饰器模式(Decorator Pattern)允许向一个现有 ╰半橙微兮°/ 2022年04月21日 22:36/ 0 赞/ 236 阅读
相关 装饰器模式 一、基类 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] /----------------------- £神魔★判官ぃ/ 2021年09月30日 08:42/ 0 赞/ 366 阅读
相关 装饰器模式 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 阅读
还没有评论,来说两句吧...