装饰模式

Posted 酒皇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了装饰模式相关的知识,希望对你有一定的参考价值。

装饰模式是指一个对象内部递归拥有自己一样的对象。不断对对象自己进行修饰,或者实现方法进行改造,就像圣诞树一层一层挂上不同的装饰品一样。

典型的常见的情况是linkList。还有输入输出流的文件流,字节流,字符流,缓冲流。

以下是一个简单的实现方法,主要作用于方法体中,产生连续调用的效果。

abstract class Shows {
    public Shows s;
    public void setS(Shows s) {
        this.s = s;
    }
    public void Show() {
        if(s!=null)s.Show();
        System.out.println("什么都没穿");
    }
}


public class Shoe extends Shows  {
    public void setS(Shows s) {
        this.s = s;
    }
    public void Show() {
        if(s!=null)s.Show();
        System.out.println("穿了鞋子");
    }
}


public class Trousers extends Shows  {
    public void setS(Shows s) {
        this.s = s;
    }
    public void Show() {
        if(s!=null)s.Show();
        System.out.println("穿了裤子");
    }
}


public class Tshit extends Shows  {
    public void setS(Shows s) {
        this.s = s;
    }
    public void Show() {
        if(s!=null)s.Show();
        System.out.println("穿了T恤");
    }
}

 

下面是实现方式

public class PerSon {
    private String name;
    private Shows s;
    

    public Shows getS() {
        return s;
    }

    public void setS(Shows s) {
        this.s = s;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    public void show(){
        s.Show();
    }

    public static void main(String[] args) {
        PerSon p=new PerSon();
        p.setName("小明");
        Shoe s1=new Shoe();
        Tshit s2=new Tshit();
        Trousers ts=new Trousers();
        s1.setS(s2);
        ts.setS(s1);
        p.setS(ts);
        p.show();
    }
}

打印出来是:

穿了T恤
穿了鞋子
穿了裤子

 

他们递归调用了show方法

以上是关于装饰模式的主要内容,如果未能解决你的问题,请参考以下文章

Thymeleaf 模板 - 有没有办法装饰模板而不是包含模板片段?

swift设计模式学习 - 装饰模式代码大全

设计模式---装饰者模式

设计模式之单例模式

装饰模式与代理模式的区别

Java设计模式之装饰者模式