设计模式之装饰者模式12

设计模式之装饰者模式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名
家长签字:王老汉
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值