设计模式-装饰者模式

动态增加额外的功能


interface DPerson{
    void eat();
}

class DMan implements DPerson{

    @Override
    public void eat() {
        System.out.println("man eat");
    }
}

abstract class Decorator implements DPerson{
    protected DPerson person;

    public void setPerson(DPerson person) {
        this.person = person;
    }

    @Override
    public void eat() {
        person.eat();
    }
}

class ManDecotatorA extends Decorator{
    @Override
    public void eat() {
        super.eat();
        reEat();
        System.out.println("ManDecotatorA");
    }
    public void reEat(){
        System.out.println("eat one more");
    }
}

class ManDecotatorB extends Decorator{
    @Override
    public void eat() {
        super.eat();
        System.out.println("---------");
        System.out.println("ManDecotatorB");
    }
    public void reEat(){
        System.out.println("eat one more");
    }
}

public class DecoratorTest {
    public static void main(String[] args){
        DMan man =new DMan();
        ManDecotatorA a =new ManDecotatorA();
        ManDecotatorB b =new ManDecotatorB();

        a.setPerson(man);
        b.setPerson(a);
        b.eat();

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 设计原则: 少用继承,多用组合 类应该对扩展开放,对修改关闭 目录 本文的结构如下: 什么是装饰者模式 为什么要用...
    w1992wishes阅读 1,247评论 0 7
  • 不使用继承 动态扩展 不改变原有的类 装饰器模式是一种结构型模式,它动态的给一个对象添加一些额外的职责。就增加功能...
    spike15阅读 1,994评论 0 0
  • 模式动机 一般有两种方式可以实现给一个类或对象增加行为: 继承机制,使用继承机制是给现有类添加功能的一种有效途径,...
    吉吉q阅读 296评论 0 0
  • 高铁上,我在背单词,但丝毫没耽误我把旁边座位上的两个中年夫妇的对话尽收耳中,就当做做了一次同声传译的分脑练习吧。 ...
    洗粉小能手阅读 212评论 2 0
  • 古今中外,斑驳的历史总会成为人类茶余饭后的谈资。 于圣人而言,背后言人是非功过则叫“品评”;于我寻常辈讲,却又叫做...
    易郁生阅读 703评论 11 4