1,Person类(ConcreteComponent)
3,具体服饰类(ConcreteFinery)
package yx.designpattern.decorator;
//Person类(ConcreteComponent)
public class Person {
private String name;
public Person(){
}
public Person(String name) {
this.name = name;
}
public void show(){
System.out.println("装扮者:"+this.name);
}
}
2,服饰类(Decorator)
package yx.designpattern.decorator;
//服饰类(Decorator)
public class Finery extends Person {
protected Person component;
//打扮
public void decorate(Person component){
this.component=component;
}
@Override
public void show() {
if(component!=null){
component.show();
}
}
}
3,具体服饰类(ConcreteFinery)
package yx.designpattern.decorator;
//具体服饰类(ConcreteFinery)
public class ConcreteFineryA extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰A");
}
}
package yx.designpattern.decorator;
//具体服饰类(ConcreteFinery)
public class ConcreteFineryB extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰B");
}
}
package yx.designpattern.decorator;
//具体服饰类(ConcreteFinery)
public class ConcreteFineryC extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰C");
}
}
package yx.designpattern.decorator;
//具体服饰类(ConcreteFinery)
public class ConcreteFineryD extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰D");
}
}
package yx.designpattern.decorator;
//具体服饰类(ConcreteFinery)
public class ConcreteFineryE extends Finery {
@Override
public void show() {
super.show();
System.out.println("已装扮服饰E");
}
}
4,客户端测试类
package yx.designpattern.decorator;
public class Test {
public static void main(String[] args) {
Person p1=new Person("小菜");
Finery f1=new ConcreteFineryA();
Finery f2=new ConcreteFineryB();
Finery f3=new ConcreteFineryC();
f1.decorate(p1);
f2.decorate(f1);
f3.decorate(f2);
f3.show();
Person p2=new Person("大鸟");
Finery f4=new ConcreteFineryD();
Finery f5=new ConcreteFineryE();
f4.decorate(p2);
f5.decorate(f4);
f5.show();
Person p3=new Person("路人");
f5.decorate(p3);//可以按照任何顺序,任何组合方案进行组合
f2.decorate(f5);
f4.decorate(f2);
f1.decorate(f4);
f3.decorate(f1);
f3.show();
}
}