设计模式之装饰者模式12

来源:互联网 发布:飞机票在线制作软件 编辑:程序博客网 时间:2024/06/04 19:52

设计模式之装饰者模式12

背景

有一次考试,小明考了60分,然后学校出了一个成绩单,要家长签字。60分,王老汉肯定不签字。这时,需要加两个装饰。

1:最高分是70分,我考了60分。
2:我排名从40到30名。

类图

设计模式之装饰者模式

代码实现

学校给的报告单

public abstract class SchoolReport {    public abstract void report();    public abstract void sign(String name);}

四年级真实的成绩单

public class FourGradeReport extends SchoolReport{    @Override    public void report() {        System.out.println("我考了60分。");    }    @Override    public void sign(String name) {        System.out.println("家长签字:"+name);    }}

抽象出来的装饰类

public abstract class Decorator extends SchoolReport{    private SchoolReport sr;    public Decorator(SchoolReport sr) {        this.sr = sr;    }    @Override    public void report() {        this.sr.report();    }    @Override    public void sign(String name) {        this.sr.sign(name);    }}

高分的修饰类

public class HighScoreReport extends Decorator{    public HighScoreReport(SchoolReport sr) {        super(sr);    }    public void reportHigh() {        System.out.println("最高分是70");    }    @Override    public void report() {        super.report();        this.reportHigh();    }}

排名的修饰类

public class SortScoreReport extends Decorator{    public SortScoreReport(SchoolReport sr) {        super(sr);    }    public void reportSort() {        System.out.println("排名从40到30名");    }    @Override    public void report() {        super.report();        this.reportSort();    }}

给王老汉看报告,并要求签字

public class Client {    public static void main(String[] args) {        SchoolReport sr = new FourGradeReport();        sr = new HighScoreReport(sr);        sr = new SortScoreReport(sr);        sr.report();        sr.sign("王老汉");    }}

运行结果

我考了60分。最高分是70排名从40到30名家长签字:王老汉
0 0
原创粉丝点击