理解:
裝飾器模式是便於擴展,在一個最基本的對象中,不斷追加新工功能(裝飾),滿足需求,對象都是獨立的;
如果利用繼承,繼承是單繼承不便於以後擴展其他功能;
舉例:
人吃飯,有錢人吃飯,神仙吃飯;
檢驗字段非空;轉義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());
}
}