版权声明:O.O 欢迎转载,如果我有能力写到原创文章的话~ https://blog.csdn.net/qq_16468937/article/details/51074649
迪米特法则(LoD),如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用[J&DP]
这个是解决类间耦合的一个很重要的原则
在类的设计上,每一个类都应当尽量降低成员的访问权限。
一个不错的资料:点击打开链接
简单说一下,其实就是不要在类的方法体内声明&&实例一个对象。 //有修改,见下
就好像你A::setPause(B *b)方法,如果你的b要用到C的话你不要直接在函数体里面
{
C *c = new C();
b->method(c);
}
你可以在B类里面弄:
class B
{
private:
C *in_c;
public:
B(C *c):in_c(c){}
void method()
{
//....behavior for in_c......
}
};
然后A的setPause(B *b)就可以这么写了:
{
b->method();
}
这样就解决了A和C之间的依赖关系,达到了解耦的目的。
虽然这么说这个模式好像注意一下就可以解决问题,但是在类的设计时想到这个的话,我觉得好难好难。。哎,代码量不够,还是要更加努力了。
// 2016/04/08 修改
原句:简单说一下,其实就是不要在类的方法体内声明&&实例一个对象。
新句:简单说一下,其实就是不要在类的方法体内实例一些根本不是自己类成员变量 || 不是方法体参数 || 不是方法体返回值 的外类对象。