打字猴:1.70046482e+09
1700464820
1700464821 public class Father{
1700464822
1700464823 public static void main(String[]args){
1700464824
1700464825 //把美化过的成绩单拿过来
1700464826
1700464827 SchoolReport sr=new SugarFouthGradeSchoolReport();
1700464828
1700464829 //看成绩单
1700464830
1700464831 sr.report();
1700464832
1700464833 //然后老爸,一看,很开心,就签名了
1700464834
1700464835 sr.sign(“老三”);//我叫小三,老爸当然叫老三
1700464836
1700464837 }
1700464838
1700464839 }
1700464840
1700464841 运行结果如下所示:
1700464842
1700464843 这次考试语文最高是75,数学是78,自然是80
1700464844
1700464845 尊敬的XXX家长:
1700464846
1700464847 ……
1700464848
1700464849 语文62数学65体育98自然63
1700464850
1700464851 ……
1700464852
1700464853 家长签名:
1700464854
1700464855 我是排名第38名……
1700464856
1700464857 家长签名为:老三
1700464858
1700464859 通过继承确实能够解决这个问题,老爸看成绩单很开心,然后就给签字了,但现实的情况是很复杂的,可能老爸听我汇报最高成绩后,就直接乐开花了,直接签名了,后面的排名就没必要看了,或者老爸要先看排名情况,那怎么办?继续扩展?你能扩展多少个类?这还是一个比较简单的场景,一旦需要装饰的条件非常多,比如20个,你还通过继承来解决,你想象的子类有多少个?你是不是马上就要崩溃了!
1700464860
1700464861 好,你也看到通过继承情况确实出现了问题,类爆炸,类的数量激增,光写这些类不累死你才怪,而且还要想想以后维护怎么办,谁愿意接收这么一大摊本质相似的代码维护工作?并且在面向对象的设计中,如果超过两层继承,你就应该想想是不是出设计问题了,是不是应该重新找一条康庄大道了,这是经验值,不是什么绝对的,继承层次越多以后的维护成本越多,问题这么多,那怎么办?好办,我们定义一批专门负责装饰的类,然后根据实际情况来决定是否需要进行装饰,类图稍作修正,如图17-4所示。
1700464862
1700464863
1700464864
1700464865
1700464866 图17-4 增加专门的装饰类图
1700464867
1700464868 增加一个抽象类和两个实现类,其中Decorator的作用是封装SchoolReport类,如果大家还记得代理模式,那么很容易看懂这个类图,装饰类的作用也就是一个特殊的代理类,真实的执行者还是被代理的角色FouthGradeSchoolReport,如代码清单17-6所示。
1700464869
[ 上一页 ]  [ :1.70046482e+09 ]  [ 下一页 ]