美文网首页Java随笔-生活工作点滴java
java设计模式-装饰器模式(Decorator)

java设计模式-装饰器模式(Decorator)

作者: yiqiquhuxi | 来源:发表于2019-07-11 13:38 被阅读75次

    装饰器模式,属于结构型模式。

    装饰器,顾名思义,就是在不改变原来结构的基础上,进行装饰。


    今天我们以圣诞树

    被装饰起来的圣诞树

    为例,给圣诞树进行装饰,我们给一个普通圣诞树,装上彩带,它就是一个彩带的圣诞树;给圣诞树装上星星,它就是一个星星的圣诞树;同时给圣诞树装上彩带,星星,它就是星星和彩带的圣诞树。如图:

    组件:

    树接口

    具体实现:

    普通圣诞树实现了树接口

    装饰器:

    装饰器实现了树接口

    彩带圣诞树继承了装饰器:

    圣诞树装饰彩带

    星星圣诞树继承了装饰器 :

    圣诞树装饰星星

    测试类:

    测试类

    通过结果可以看出来,即使是给圣诞树装上彩带,普通的圣诞树还在,不会影响原有的接口。给彩带圣诞树装上星星,彩带圣诞树和普通圣诞树也会一直存在,不影响原有的接口。这就是装饰器模式的好处。

    有人会说。我通过多个类实现Shu接口,也能实现多个圣诞树,没错,当然可以。这也看出来装饰器模式的意图:在不想增加很多子类的情况下扩展类。



    JDK源码分析:

    inputStream类结构

    JDK中inputstream 是一个比较经典的装饰器模式,分析如下:

    inputStream是我们的接口组件类(抽象类或者接口,相当于上面的Shu)

    InputStream

    FileInputStream 是普通的接口实现(可忽略)

    FileInputStream

    FilterInputStream使我们的装饰器(Decorator)

    装饰器

    具体装饰类(相当于上面的Caidai类):

    具体装饰类DataInputStream 具体装饰类LineNumerInputStream

    具体装饰类中引入了InputStream。不论具体装饰类:DataInputStream,LineNumerInputStream怎么扩展,底层用的都是InputStrem接口对象。满足了设计模式的开闭原则。

    相关文章

      网友评论

        本文标题:java设计模式-装饰器模式(Decorator)

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