装饰模式
装饰模式是指一个对象内部递归拥有自己一样的对象。不断对对象自己进行修饰,或者实现方法进行改造,就像圣诞树一层一层挂上不同的装饰品一样。
典型的常见的情况是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方法