码迷,mamicode.com
首页 > 其他好文 > 详细

6大设计原则(5):迪米特法则

时间:2015-07-23 12:17:29      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:6大设计原则   设计模式   

迪米特法则:LoD

也被称为最少知识原则

定义:一个对象应该对其他对象有最少的了解。

 

通俗的说就是一个类应该对自己需要耦合或调用的类知道的最少,类内部如何复杂跟我们没有关系

我们所要了解的只是类对外提供的public方法。

 

迪米特法则对类的低耦合性提出明确的要求,包含4个含义:

 

1.只和朋友交流

一个例子:老师让体委点一下女生的数量。

 

 

class Teacher {
	public void commond(GroupLeader groupLeader) {
		List<Girls> girls = new ArrayList<>();
		for (int i = 0; i < 20; i++) {
			girls.add(new Girls());
		}
		groupLeader.countGirls(girls);
	}
}

class GroupLeader {

	public void countGirls(List<Girls> girls) {
		System.out.println("女生的数量是:--->" + girls.size());
	}

}

class Girls {
}

public class Client {

	public static void main(String[] args) {
		Teacher teacher = new Teacher();
		teacher.commond(new GroupLeader());
	}
}


 

每个对象与必然会与其他对象有耦合关系,两个对象之间的耦合就成为朋友关系,应该只与朋友类进行交流。

那么什么是朋友类呢?出现在成员变量、方法的输入输出参数的类成为朋友类,出现在方法体内部的类不是朋友类。

上面的代码中,Teacher类的朋友类是GroupLeader类,但是commond方法体中竟然出现了Girls类,显然违反了迪米特法则。

修改一下:

 

class Teacher {
	public void commond(GroupLeader groupLeader) {

		groupLeader.countGirls();
	}
}

class GroupLeader {

	List<Girls> girls = new ArrayList<>();

	public GroupLeader(List<Girls> girls) {
		this.girls = girls;
	}

	public void countGirls() {
		System.out.println("女生的数量是:--->" + girls.size());
	}

}

class Girls {
}

public class Client {

	public static void main(String[] args) {
		List<Girls> girls = new ArrayList<>();
		for (int i = 0; i < 20;i++){
			girls.add(new Girls());
		}
		Teacher teacher = new Teacher();
		teacher.commond(new GroupLeader(girls));
	}
}


 

这样就实现了只与朋友类进行交流。

 

2.朋友间也是有距离的

什么意思呢?

再好的朋友之间也是有秘密可言的。

就是说一个类中的方法不能全部暴露出去,尽可能减少public的属性和方法,public的属性或方法越多,这个类就越不安全,

修改所涉及的面越大。

 

3.是自己的就是自己的

如果一个方法放在本类中和放在别的类中都行,那么就放在本类中。

 

4.谨慎使用Serializable

不懂啥意思。。。

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

6大设计原则(5):迪米特法则

标签:6大设计原则   设计模式   

原文地址:http://blog.csdn.net/u013476556/article/details/47017997

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!