2.3.5、最少知识原则

最少知识原则 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解析类就耦合了。

另外如果两个类本身有互相调用,可以想办法减少他们互相调用的方法,转移到新的类中。这样两个类就可以从高耦合变成低耦合。

当然,具体的情况要看业务逻辑来安排解耦。因为所谓的耦合,说的就是功能上的耦合。两个不相关的功能模块,如果紧密联系到一起,这个就是高耦合。

发布了39 篇原创文章 · 获赞 2 · 访问量 5004

猜你喜欢

转载自blog.csdn.net/u013636987/article/details/104171308