迪米特法则(LoD)
来源:互联网 发布:超级基因优化液56章 编辑:程序博客网 时间:2024/05/21 09:30
一、概念
如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
二、详细说明
迪米特法则,又叫最少知识原则,一个对象应当对其他对象尽可能少的了解,不和陌生人说话。它首先强调的前提是在类的结构设计上,每一个类都应当尽量降低成员的访问权限,也就是说,一个类包装好自己的private状态,不需要让别的类知道的字段或行为就不要公开。其根本思想,是强调了类之间的松耦合。类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会的对有关系的类造成波及。也就是说,信息的隐藏促进了软件的复用。
三、举例说明
下面的代码在方法体内部依赖了其他类,这严重违反迪米特法则。
public class Teacher { public void commond(GroupLeader groupLeader)
{ List<Girl> listGirls = new ArrayList<Girl>(); for (int i = 0; i < 20; i++)
{ listGirls.add(new Girl()); } groupLeader.countGirls(listGirls); } }
正确的做法为public class Teacher
{ public void commond(GroupLeader groupLeader)
{ groupLeader.countGirls(); } }public class GroupLeader
{ private List<Girl> listGirls; public GroupLeader(List<Girl> _listGirls)
{ this.listGirls = _listGirls; } public void countGirls()
{ System.out.println("女生数量是:" + listGirls.size()); } }
四、一点建议在运用迪米特法则到系统的设计中时,要注意以下几点:
1.在类的划分上,应当创建弱耦合的类,类与类之间的耦合越弱,就越有利于实现可复用的目标。
2.在类的结构设计上,每个类都应该降低成员的访问权限。
3.在类的设计上,只要有可能,一个类应当设计成不变的类。
4.在对其他类的应用上,一个对象对其他类的对象的应用应该降到最低。
5.尽量限制局部变量的有效范围。
注意:迪米特法则要求类“羞涩”一点,尽量不要对外公布太多的public方法和非静态的public变量,尽量内敛,多使用private、package-private、protected等访问权限。
参考:http://blog.csdn.net/yuluows/article/details/7082203
http://www.cnblogs.com/muzongyan/archive/2010/08/05/1793000.html
- 迪米特法则(LoD)
- 迪米特法则(LoD 笔记)
- 迪米特法则 (Law of Demeter, LoD)
- 迪米特法则(LoD)-最少知识原则
- 软件设计原则----迪米特法则(LoD)
- 软件设计原则----迪米特法则(LoD) .
- OOD设计原则之迪米特法则(LoD)
- 六大原则之“迪米特法则(LoD)“笔记
- 设计模式六大原则之--迪米特法则(LoD)
- 设计模式六大原则——迪米特法则(LoD)
- 设计模式之迪米特法则LoD(最少知识原则)
- 六大原则之“迪米特法则(LoD)“笔记
- 迪米特法则(LOD)——最少知识原则
- 设计模式--迪米特法则(Lod/LKP)
- 设计模式六大原则(5):迪米特法则LOD(Law Of Demeter)
- 设计模式之六大原则——迪米特法则(LoD,LKP)
- 设计模式之六大原则——迪米特法则(LoD,LKP)
- 软件设计原则----迪米特法则(LoD)http://blog.csdn.net/beyondhaven/article/details/6906148
- MD5算法
- 云计算入门课程
- SHA1算法原理
- 查看表被那些存储过程、函数、视图、触发器使用
- VA_X技巧
- 迪米特法则(LoD)
- 盘点程序员新年要做的10个决定(转)
- 毕业5年决定你的命运 --------值得所有不甘平庸的人看看
- Linux工作队列实现机制
- tomcat RequestDispatcher directory traversal vulnerability
- How To: Use DPAPI to Encrypt and Decrypt Data (C#/VB.NET)
- 在C++中使用Lua
- JSON的解析
- 晒晒C++:虚函数的真相(VC编译器如何实现“virtual ”规则)