开发者社区> 过了即是客> 正文

设计模式(十)装饰器模式

简介: 装饰器模式是一种非常有用的结构型模式,它允许我们在不改变类的结果的情况下,为类添加新的功能。 我们来举例说明一下。首先添加一组形状,它们都实现了形状接口。
+关注继续查看

装饰器模式是一种非常有用的结构型模式,它允许我们在不改变类的结果的情况下,为类添加新的功能。

我们来举例说明一下。首先添加一组形状,它们都实现了形状接口。

public interface Shape {
    String getShape();
}

class Square implements Shape{

    @Override
    public String getShape() {
        return "正方形";
    }
}

class Circle implements Shape{

    @Override
    public String getShape() {
        return "圆";
    }
}

然后再来定义装饰器。装饰器同样需要实现Shape接口,而且在装饰器中还需要对Shape进行补充(也就是装饰)。

public abstract class ColorDecorator implements Shape {
    protected Shape shape;

    public ColorDecorator(Shape shape) {
        this.shape = shape;
    }

}

class RedDecorator extends ColorDecorator {
    public RedDecorator(Shape shape) {
        super(shape);
    }

    @Override
    public String getShape() {
        return "红色的" + shape.getShape();
    }
}

class BlueDecorator extends ColorDecorator {
    public BlueDecorator(Shape shape) {
        super(shape);
    }

    @Override
    public String getShape() {
        return "绿色的" + shape.getShape();
    }
}

最后再来验证一下。我们成功在没有修改形状类的前提下,为形状增加了颜色的功能。

    public void run() {
        Shape square = new Square();
        Shape circle = new Circle();

        Shape redSquare = new RedDecorator(square);
        Shape blueCircle = new BlueDecorator(circle);
        System.out.println(redSquare.getShape());
        System.out.println(blueCircle.getShape());
    }

装饰器模式在很多地方都有使用。在Java里面最经典的使用场景就是Java那一大堆的IO类,例如BufferedInputStream或者 FileOutputStream这样的。Java的IO类库通过多个不同IO类的嵌套,可以实现多种功能(例如缓存)的组合。当然其实Java的IO库是一个反面教材,由于装饰器模式的过度使用,导致系统中类太多太复杂,反而不利于我们学习和使用。在实际使用中我们也要注意设计模式的合理使用,不要为了使用而使用。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
一起来学设计模式之装饰器模式
前言 目前正在出一个设计模式专题系列教程, 篇幅会较多, 喜欢的话,给个关注❤️ ~ 本节给大家讲一下设计模式中的装饰器模式,并结合实际业务场景给大家讲解如何使用~ 本专题的所有案例代码主要以Java语言为主, 好了, 废话不多说直接开整吧~ 装饰器模式 装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许在运行时动态地给一个对象添加额外的职责,而不需要修改原始类的代码。这种模式是作为替代继承方式的一种实现。
10 0
浅谈设计模式 - 装饰器模式(五)
​ 装饰器模式是是对类进行增强的一种典型设计模式,它允许对于一个现有类进行增强的操作,对于喜欢使用继承的伙伴,这个模式非常贴切的展示的了对于继承的灵活用法。但是装饰器模式同样不是一个推崇使用的模式,因为他对于继承存在依赖性,从本文后续就可以了解到装饰类膨胀的问题,所以在设计代码结构的时候,装饰器模式并不是第一考虑。
17 0
《设计模式》装饰者模式
《设计模式》装饰者模式
36 0
23种设计模式——装饰者模式
这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。
25 0
浅析设计模式3 —— 装饰者模式
推荐语:本文从装饰者模式的核心思想到与其他设计模式的横向对比,从代码示例到业务实战,向读者娓娓呈现装饰者模式的真貌。深入浅出的JDK源码透析,使用场景的利弊权衡,真的值得一阅! ——大淘宝技术开发工程师 玄苏
71 0
设计模式之装饰器模式
装饰器在java中最典型的应用就是IO,我们知道在IO家族中有各种各样的流,而流往往都是作用在子类之上,然后增加其附加功能,我们以InputStream 举例。
86 0
设计模式-2-装饰器模式
装饰器模式(Decorator Pattern)就是在不改变原始对象本质的前提下,对现有类进行包装,从而提供出额外的功能。
41 0
【设计模式系列7】装饰器模式
突然想写这个设计模式,是因为刚看了FactoryBean,因为它通过装饰模式,来进一步修饰Bean对象,所以想看看这个模式是怎么使用的。我理解这个设计模式,就是基于原来的对象进行装饰。
67 0
设计模式之装饰器模式
本篇文章是设计模式专题的第七篇文章,我会将遇到的设计模式都一一总结在该专题下,我会把自己对每一种设计模式的感悟写下来,以及在实际工作中我们该如何去灵活应用这些设计模式,欢迎大家关注。本篇文章我们就来讲一讲,以更加优雅的方式扩展类的装饰器模式。
59 0
设计模式 - 装饰器模式(二)(上)
设计模式 - 装饰器模式(二)(上)
38 0
+关注
过了即是客
一个普普通通的程序员
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载