装饰模式动态地给一个对象添加一些额外的职责(功能)。它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。
这里省去了ConcreteComponent,Person作为Component,Decorator 作为Decorator装饰类。 TShirts和BigTrouser类作为具体的装饰对象,给Person添加不同的功能。
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public Person(){}
public void show(){
System.out.println("装扮:"+name);
}
}
public class Decorator extends Person {
private Person person;
public void decorate(Person person){
this.person=person;
}
@Override
public void show() {
person.show();
}
}
public class TShirts extends Decorator {
@Override
public void show() {
super.show();
System.out.println("T恤");
}
}
public class BigTrouser extends Decorator {
@Override
public void show() {
super.show();
System.out.println("垮裤");
}
}
public class Test {
public static void main(String[] args) {
Person person=new Person("gakki");
TShirts tShirts=new TShirts();
BigTrouser bigTrouser=new BigTrouser();
tShirts.decorate(person);
bigTrouser.decorate(tShirts);
bigTrouser.show();
}
}