装饰模式

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

典型的常见的情况是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方法

posted @ 2018-05-12 21:16  酒皇  阅读(118)  评论(0编辑  收藏  举报