最少知识原则 Least Knowledge Principle / 迪米特法则 Law Of Demeter
定义
一个对象应该对其他对象保持最少的了解。An object should keep a minimum understanding of other objects.
只与直接的朋友通信。Only talk to your immedate friends.
简单来说,就是一个方法,如果被复数对的类引用,最好新建一个类来放置这个方法。
例如:
D类要调用g方法,他在自己的类里面加了个方法。后面E类,F类也要调用g方法。
public class D {
public void d()
{
g("D类");
}
public void g(String friend)
{
Log.e("ldy","D类有朋友"+friend);
}
}
public class E {
public void e()
{
D d=new D();
d.g("E类");
}
}
public class F {
public void f()
{
D d=new D();
d.g("F类");
}
}
这样,D类和E类,D类和F类就有了朋友关系了,他们就耦合了,如果他们双方互相引用的方法和变量越多,他们懂得耦合性就越高。
如何解耦合,只要把公用的g方法,放置到一个新的类。如下
public class A {
public void a()
{
Friend friend=new Friend("A类");
friend.friend();
}
}
public class B {
public void b()
{
Friend friend=new Friend("B类");
friend.friend();
}
}
public class C {
public void c()
{
Friend friend=new Friend("C类");
friend.friend();
}
}
public class Friend {
private final String friend;
public Friend(String friend) {
this.friend=friend;
}
public void friend()
{
Log.e("ldy","Friend类有朋友"+friend);
}
}
确保一个类不会被其他无关的类调用。比如xml解析类可以调用数值转换工具类,json解析类可以调用数值转换工具类。但是如果你把数值转换工具的方法放置在xml解析类里面,json解析类去调用xml解析类里面的数值转换工具的方法。那么原来没有关系的两个xml解析类和json解析类就耦合了。
另外如果两个类本身有互相调用,可以想办法减少他们互相调用的方法,转移到新的类中。这样两个类就可以从高耦合变成低耦合。
扫描二维码关注公众号,回复:
8987198 查看本文章
当然,具体的情况要看业务逻辑来安排解耦。因为所谓的耦合,说的就是功能上的耦合。两个不相关的功能模块,如果紧密联系到一起,这个就是高耦合。