java – 这段代码如何破坏得墨忒耳法则?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 这段代码如何破坏得墨忒耳法则?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2260字,纯文字阅读大概需要4分钟。
内容图文
以下代码打破了Law of Demeter:
public class Student extends Person {
private Grades grades;
public Student() {
}
/** Must never return null; throw an appropriately named exception, instead. */
private synchronized Grades getGrades() throws GradesException {
if( this.grades == null ) {
this.grades = createGrades();
}
return this.grades;
}
/** Create a new instance of grades for this student. */
protected Grades createGrades() throws GradesException {
// Reads the grades from the database, if needed.
//
return new Grades();
}
/** Answers if this student was graded by a teacher with the given name. */
public boolean isTeacher( int year, String name ) throws GradesException, TeacherException {
// The method only knows about Teacher instances.
//
return getTeacher( year ).nameEquals( name );
}
private Grades getGradesForYear( int year ) throws GradesException {
// The method only knows about Grades instances.
//
return getGrades().getForYear( year );
}
private Teacher getTeacher( int year ) throws GradesException, TeacherException {
// This method knows about Grades and Teacher instances. A mistake?
//
return getGradesForYear( year ).getTeacher();
}
}
public class Teacher extends Person {
public Teacher() {
}
/**
* This method will take into consideration first name,
* last name, middle initial, case sensitivity, and
* eventually it could answer true to wild cards and
* regular expressions.
*/
public boolean nameEquals( String name ) {
return getName().equalsIgnoreCase( name );
}
/** Never returns null. */
private synchronized String getName() {
if( this.name == null ) {
this.name == "";
}
return this.name;
}
}
问题
> LoD怎么坏了?
>破坏LoD的代码在哪里?
>如何编写代码来维护LoD?
解决方法:
违反了得墨忒耳法则的学生方法是
private Grades getGradesForYear( int year )
private Teacher getTeacher( int year )
因为这些将域对象Grades和Teacher暴露给应用程序.
假设您希望继续隐藏成绩中学生和教师的成绩,解决此问题的一种方法是在类Student中定义代理方法(也称为委托方法),代表内部成绩和教师对象操作应用程序,类似于方法Student.isTeacher(int,String).这个解决方案可能导致Grades和Teacher in Student中的方法重复,这是一个尊重LofD的disadvantage类设计.
一个更好的解决方案是从学生中删除成绩和教师,并将它们全部放在另一个班级,比如Transcript:
class Transcript {
Student student;
Teacher teacher;
Grades grades;
Integer year;
}
内容总结
以上是互联网集市为您收集整理的java – 这段代码如何破坏得墨忒耳法则?全部内容,希望文章能够帮你解决java – 这段代码如何破坏得墨忒耳法则?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。