美文网首页
装饰者模式(Decorator)

装饰者模式(Decorator)

作者: 群众里面有坏人呐 | 来源:发表于2018-12-25 09:54 被阅读0次

定义

动态地给一个对象添加一些额外的职责。就增加功能来说, Decorator模式相比生成子类更为灵活。该模式以对客 户端透明的方式扩展对象的功能。

为什么要使用装饰者模式

  • 在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。
  • 处理那些可以撤消的职责。
  • 当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的 子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。

角色

  1. 抽象组件:定义一个抽象接口,来规范准备附加功能的类
  2. 具体组件:将要被附加功能的类,实现抽象构件角色接口
  3. 抽象装饰者:持有对具体构件角色的引用并定义与抽象构件角色一致的接口
  4. 具体装饰:实现抽象装饰者角色,负责对具体构件添加额外功能。

实例

抽象组件

public interface Shape {
    void draw();
}

具体组件

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("shape: rectangle");
    }
}

抽象装饰者

public abstract class ShapeDecorator implements Shape {
    protected Shape decoratedShape;
    public ShapeDecorator(Shape decoratedShape) {
        this.decoratedShape = decoratedShape;
    }
    public void draw(){
        decoratedShape.draw();
    }
}

具体装饰

public class RedShapeDecorator extends ShapeDecorator {
    public RedShapeDecorator(Shape decoratedShape) {
        super(decoratedShape);
    }
    @Override
    public void draw(){
        decoratedShape.draw();
        setRedBorder(decoratedShape);
    }
    private void setRedBorder(Shape decoratedShape){
        System.out.println("Border Color: Red");
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        Shape shape = new Rectangle();
        ShapeDecorator decorator = new RedShapeDecorator(shape);
        decorator.draw();
    }
}

运行结果

shape: rectangle
Border Color: Red

相关文章

  • 装饰者(Decorator)模式

    装饰者(Decorator)模式装饰模式又名包装(Wrapper)模式。装饰模式是继承关系的一个替代方案。装饰模式...

  • 装饰者模式和代理模式

    装饰者模式和代理模式 装饰者模式 名称:Decorator 分类:结构型模式 意图:动态的为目标对象增加功能,比继...

  • 设计模式之装饰器模式

    也称装饰者模式、装饰器模式、Wrapper、Decorator。 装饰模式是一种结构型设计模式,允许你通过将对象放...

  • Java23种设计模式之结构型模式「装饰器模式」

    装饰器模式 - Decorator Pattern 装饰器模式(Decorator Pattern)允许向一个现有...

  • 装饰者模式

    一、装饰者模式概述-Decorator 装饰者模式是动态地给一个对象添加一些额外的职责。想要扩展功能,装饰者模式提...

  • 【设计模式笔记】(十九)- 装饰者模式

    简述 装饰者模式(Decorator Pattern)也称为包装模式(Wrapper Pattern),以透明动态...

  • 装饰器模式和代理模式的区别

    这两个设计模式看起来很像:对装饰器模式来说,装饰者(decorator)和被装饰者(decoratee)都实现同一...

  • 装饰者模式(Decorator)

    定义动态地给一个对象增加一些额外的职责(Responsibility),就增加对象功能来说,装饰模式比生成子类实现...

  • 装饰者模式(Decorator)

    统一接口 提供一个同一的接口同目标对象与装饰对象实现 目标对象 目标对象包装类 在调用目标对象业务方法前后,可以有...

  • Decorator(装饰者模式)

    原文 别名 包装器 目的 动态地向一个对象添加额外职责,装饰模式提供了相对子类更加灵活的添加功能方式。 解释 真实...

网友评论

      本文标题:装饰者模式(Decorator)

      本文链接:https://www.haomeiwen.com/subject/kcuxlqtx.html