大話設計モード3装飾モードのjavaコード実現
1,Personクラス(ConcreteComponent)
2、アパレル類(Decorator)
3、具体的な服装類(ConcreteFinery)
4、クライアントテストクラス
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();
}
}