//Component抽象构件
public abstract class SchoolReport {
public abstract void report();
public abstract void sign(String name);
}
//ConcreteComponent具体构件 被装饰角色
public class FouthGradeSchoolReport extends SchoolReport {
@Override
public void report() {
System.out.println("成绩单。。。。");
System.out.println("//////");
System.out.println("语文 61 数学 60 英语 59");
System.out.println("/////");
}
@Override
public void sign(String name) {
System.out.println("家长签名:"+name);
}
}
//Decorator装饰角色
public abstract class Decorator extends SchoolReport{
private SchoolReport sr;
public Decorator(SchoolReport _sr){
this.sr = _sr;
}
public void report(){
this.sr.report();
}
public void sign(String name){
this.sr.sign(name);
}
}
//具体装饰角色
public class HighScoreDecorator extends Decorator {
public HighScoreDecorator(SchoolReport _re){
super(_re);
}
private void reportHighScore(){
System.out.println("汇报最高成绩");
}
@Override
public void report() {
this.reportHighScore();
super.report();
}
}
//具体装饰角色
public class SortDecorator extends Decorator {
public SortDecorator(SchoolReport _sr) {
super(_sr);
}
private void reportSort(){
System.out.println("我是排名第38");
}
@Override
public void report(){
super.report();
this.reportSort();
}
}
//场景类
public class Father {
public static void main(String[] args) {
SchoolReport schoolReport;
schoolReport = new FouthGradeSchoolReport();
schoolReport = new HighScoreDecorator(schoolReport);
schoolReport = new SortDecorator(schoolReport);
schoolReport.report();
schoolReport.sign("老三");
}
}