理解:
装饰器模式是便于扩展,在一个最基本的对象中,不断追加新工功能(装饰),满足需求,对象都是独立的;
如果利用继承,继承是单继承不便于以后扩展其他功能;
举例:
人吃饭,有钱人吃饭,神仙吃饭;
检验字段非空;转义html;***合法性;
public interface Decorator {
public String eat();
}
//基类
public class Person implements Decorator{
@Override
public String eat() {
return "吃饭";
}
}
//装饰类
public abstract class FilterPerson implements Decorator{
protected Decorator p;
public FilterPerson(Decorator p) {
this.p=p;
}
@Override
public String eat() {
return p.eat();
}
}
//富人吃饭
public class SuperPerson extends FilterPerson{
public SuperPerson(Decorator p) {
super(p);
}
public String eat(){
return "先来杯酒;"+p.eat()+";再来根烟";
}
}
public class GodPerson extends FilterPerson{
public GodPerson(Decorator p) {
super(p);
}
public String eat(){
return "喝个人参汤;"+p.eat()+";唱个歌";
}
}
//测试
public class Test {
public static void main(String[] args) {
Decorator p=new Person();
System.out.println(p.eat());
Decorator superp=new GodPerson(new SuperPerson(p));
System.out.println(superp.eat());
}
}
原文:http://xuliangjun.blog.51cto.com/7398089/1752486