码迷,mamicode.com
首页 > 其他好文 > 详细

装饰模式

时间:2018-05-12 22:30:31      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:void   ati   自己   输出流   span   对象   his   输出   end   

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

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

装饰模式

标签:void   ati   自己   输出流   span   对象   his   输出   end   

原文地址:https://www.cnblogs.com/blackdeng/p/9029963.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!