【有毒的设计模式】迪米特法则

版权声明: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 修改

原句:简单说一下,其实就是不要在类的方法体内声明&&实例一个对象。

新句:简单说一下,其实就是不要在类的方法体内实例一些根本不是自己类成员变量 || 不是方法体参数 || 不是方法体返回值 的外类对象。

猜你喜欢

转载自blog.csdn.net/qq_16468937/article/details/51074649