装饰者模式

Source:被装饰对象
Decorator:装饰者父类,继承Source。该对象中有一个source实例
DecoratorA: 具体的装饰者。继承Decorator,自己的方法+supper中的方法。
DecoratorB: 具体的装饰者。继承Decorator,自己的方法+supper中的方法。

public class Source {
    public void sing(){
        System.out.println("sing..");
    }
}
public class Decorate extends Source {

    private Source source;

    public Decorate(Source source) {
        this.source = source;
    }

    @Override
    public void sing() {
        source.sing();
    }
}
public class DecorateA extends Decorate {

    public DecorateA(Source source) {
        super(source);
    }

    @Override
    public void sing() {
        dance();
        super.sing();
    }

    public void dance() {
        System.out.println("dance...");
    }
}

public class DecorateB extends Decorate {

    public DecorateB(Source source) {
        super(source);
    }

    @Override
    public void sing() {
        cry();
        super.sing();
    }

    public void cry() {
        System.out.println("cry...");
    }
}
public class Client {
    public static void main(String[] args) {
        Source source = new Source();
        Source decorateA = new DecorateB(new DecorateA(source));
        decorateA.sing();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 设计原则: 少用继承,多用组合 类应该对扩展开放,对修改关闭 目录 本文的结构如下: 什么是装饰者模式 为什么要用...
    w1992wishes阅读 4,976评论 0 7
  • 本篇文章介绍一种设计模式——装饰者模式。装饰者模式在Java中的典型应用就是IO流,在本篇文章中将有详细介绍。本篇...
    Ruheng阅读 22,412评论 13 56
  • 装饰模式是一种用于替代继承的技术,它通过一种无须定义子类的方式来给对象动态增加职责,使用对象之间的关联关系取代类之...
    stoneyang94阅读 2,948评论 0 0
  • 概述 一般情况下,当我们想给一个类或对象添加功能的时候,有两种常用的方式: 继承:通过使用继承,我们可以使子类既能...
    骑着乌龟去看海阅读 3,712评论 0 1
  • 定义 装饰者模式:在不改变原类文件以及不使用继承的情况下,动态地将责任附加到对象上,从而实现动态拓展一个对象的功能...
    丶蓝天白云梦阅读 5,800评论 2 23

友情链接更多精彩内容