好的,所以信号和插槽允许对象和方法之间的松散耦合连接到另一个对象及其方法。这很好,但是这些信号槽对象作为父类的公共成员存在,因此它们的暴露破坏了松散耦合以创建紧密耦合的代码。这是一个负面的事情。不应该将信号设为私有,以便父类处理信号的连接/断开连接吗?
答案 0 :(得分:0)
嗯,某些需要知道eventFoo
上发生ObjectA
时,需要调用handlerBar
上的ObjectB
。
在最简单的无委托实施中,该责任在ObjectA
上,在ObjectB->handlerBar
正文中调用eventFoo
。这需要它了解ObjectB
,并知道ObjectB->handlerBar
是正确的。相比之下,ObjectB
并不需要了解ObjectA
。
在一种使用信号和插槽的方法中,责任在ObjectB
。它负责将handlerBar
注册为eventFoo
信号的处理程序。因此,它需要了解ObjectA
,但ObjectA
并不需要了解ObjectB
。
在另一种方法中,ObjectB
将handlerBar
公开为一个广告位,其他一些代码将eventFoo
与handlerBar
相关联。那"其他代码"需要了解ObjectA
和ObjectB
,但两个人都不需要了解另一个。
因此,当有人谈论信号和插槽减少耦合时,他们的意思是事件生成对象和事件处理对象不再明确地相互耦合,因为他们的责任之一就是维护耦合。相反,耦合是由一段独立的代码执行的,该代码负责耦合,并且与其余的对象无关。接口
现在,你提到了#34;父类",这让我觉得你正在考虑其中一个类已经耦合到另一个的情况。在这种情况下,公共信号和插槽在减少耦合方面不那么成功。