1700455813
1700455814
代码清单5-4 场景类
1700455815
1700455816
public class Client{
1700455817
1700455818
public static void main(String[]args){
1700455819
1700455820
Teacher teacher=new Teacher();
1700455821
1700455822
//老师发布命令
1700455823
1700455824
teacher.commond(new GroupLeader());
1700455825
1700455826
}
1700455827
1700455828
}
1700455829
1700455830
运行结果如下所示:
1700455831
1700455832
女生数量是:20
1700455833
1700455834
体育委员按照老师的要求对女生进行了清点,并得出了数量。我们回过头来思考一下这个程序有什么问题,首先确定Teacher类有几个朋友类,它仅有一个朋友类——GroupLeader。为什么Girl不是朋友类呢?Teacher也对它产生了依赖关系呀!朋友类的定义是这样的:出现在成员变量、方法的输入输出参数中的类称为成员朋友类,而出现在方法体内部的类不属于朋友类,而Girl这个类就是出现在commond方法体内,因此不属于Teacher类的朋友类。迪米特法则告诉我们一个类只和朋友类交流,但是我们刚刚定义的commond方法却与Girl类有了交流,声明了一个List<Girls>动态数组,也就是与一个陌生的类Girl有了交流,这样就破坏了Teacher的健壮性。方法是类的一个行为,类竟然不知道自己的行为与其他类产生依赖关系,这是不允许的,严重违反了迪米特法则。
1700455835
1700455836
问题已经发现,我们修改一下程序,将类图稍作修改,如图5-2所示。
1700455837
1700455838
1700455839
1700455840
1700455841
图5-2 修改后的类图
1700455842
1700455843
在类图中去掉Teacher对Girl类的依赖关系,修改后的Teacher类如代码清单5-5所示。
1700455844
1700455845
代码清单5-5 修改后的老师类
1700455846
1700455847
public class Teacher{
1700455848
1700455849
//老师对学生发布命令,清一下女生
1700455850
1700455851
public void commond(GroupLeader groupLeader){
1700455852
1700455853
//告诉体育委员开始执行清查任务
1700455854
1700455855
groupLeader.countGirls();
1700455856
1700455857
}
1700455858
1700455859
}
1700455860
1700455861
修改后的GroupLeader类如代码清代5-6所示。
1700455862
[
上一页 ]
[ :1.700455813e+09 ]
[
下一页 ]