java装饰模式

原文链接:http://blog.csdn.net/caihuangshi/article/details/51334097


如图17-4所示。




package com.east.spark.pattern.decorator;

public abstract class SchoolReport {

	// 展示成绩情况
	public abstract void report();

	// 家长签字
	public abstract void sign(String name);

}



package com.east.spark.pattern.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);
	}
}



package com.east.spark.pattern.decorator;

public class FouthGradeSchoolReport extends SchoolReport {
	// 我的成绩单
	public void report() {
		// 成绩单的格式是这个样子的
		System.out.println("尊敬的XXX家长:");
		System.out.println("······");
		System.out.println("语文62 数学65 体育98 自然63");
		System.out.println("······");
		System.out.println("      家长签字");
	}

	// 家长签名
	public void sign(String name) {
		System.out.println("家长签字为:" + name);
	}
}


package com.east.spark.pattern.decorator;

public class HighScoreDecorator extends Decorator {
	// 构造函数
	public HighScoreDecorator(SchoolReport sr) {
		super(sr);
	}

	// 我要汇报最高成绩
	private void reportHighScore() {
		System.out.println("这次考试语文最高是75, 数学是78, 自然是80");
	}

	// 我要在老爸看成绩单前告诉他最高成绩, 否则等他一看, 就抡起扫帚揍我, 我哪里还有机会说啊
	@Override
	public void report() {
		this.reportHighScore();
		super.report();
	}
}


package com.east.spark.pattern.decorator;

public class SortDecorator extends Decorator {
	// 构造函数
	public SortDecorator(SchoolReport sr) {
		super(sr);
	}

	// 告诉老爸成绩的排名情况
	private void reportSort() {
		System.out.println("我排名是第38名...");
	}

	// 老爸看完成绩单后再告诉他,加强作用
	public void report() {
		super.report();
		this.reportSort();
	}
}


package com.east.spark.pattern.decorator;

public class Father {
	public static void main(String[] args) {
		// 把成绩单拿过来
		SchoolReport sr;
		// 原装的成绩单
		sr = new FouthGradeSchoolReport();
		// 加了最高分说明的成绩单
		sr = new HighScoreDecorator(sr);
		// 又加了成绩排名的说明
		sr = new SortDecorator(sr);
		// 看成绩单
		sr.report();
		// 然后老爸一看, 很开心, 就签名了
		sr.sign("老三");// 我叫小三, 老爸当然叫老三
	}
}



这次考试语文最高是75, 数学是78, 自然是80
尊敬的XXX家长:
······
语文62 数学65 体育98 自然63
······
      家长签字
我排名是第38名...
家长签字为:老三





































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值