//装饰者模式最主要的是要区分哪些类是装饰者,哪些类是被装饰者publicabstractclassPerson{//装饰者类publicabstractvoiddressed();}publicclassBoyextendsPerson{@Overridepublicvoiddressed(){
System.out.println("什么衣服也没穿");}}
、
publicabstractclassPersonClothextendsPerson{//被装饰者类//装饰物即继承被装饰物也组合了被装饰物,这是装饰者模式的一大特点protected Person person;publicPersonCloth(Person person){this.person = person;}@Overridepublicvoiddressed(){
person.dressed();}}publicclassExpensiveClothextendsPersonCloth{publicExpensiveCloth(Person person){super(person);}privatevoiddressJean(){
System.out.println("床牛仔裤");}privatevoiddressShirt(){
System.out.println("床短袖");}@Overridepublicvoiddressed(){
person.dressed();dressJean();dressShirt();}}publicclassCheapClothextendsPersonCloth{publicCheapCloth(Person person){super(person);}publicvoiddressShorts(){
System.out.println("穿条短袖");}@Overridepublicvoiddressed(){
person.dressed();dressShorts();}}publicclassJavaApplication13{/**
* @param args the command line arguments
*/publicstaticvoidmain(String[] args){// TODO code application logic here
Person person =newBoy();
person =newExpensiveCloth(person);
person.dressed();
Person person2 =newBoy();
person2 =newExpensiveCloth(person);
person2.dressed();}}