FishiGUI:双向依赖--强双向依赖和弱双向依赖

前端之家收集整理的这篇文章主要介绍了FishiGUI:双向依赖--强双向依赖和弱双向依赖前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

问题:

操作系统适配器层的适配器子系统需要向框架层发送键盘或者鼠标消息,c++代码如何发送这一类消息呢?让适配器子系统调用框架层的一个函数?这样一来操作系统适配器子系统必须依赖于框架层了,违背了每一层只能依赖于下面一层的原则。

一个想法:让适配器子系统层和框架层双向依赖?


双向依赖的问题:强双向依赖和若双向依赖

强双向依赖:即在父亲类中聚合了一个孩子,而孩子类中有聚合一个父亲,首这种强双向依赖的关系不仅在现实世界根本不存在,在面向对象世界也不可能存在:“父亲有一个孩子,孩子有一个父亲”涉及到了两个命题,一个是因,一个是果,它们不能互为因果,在面向对象世界里,互为因果的代码则无法通过编译;

文件互相循环嵌入的代码也无法通过编译,这种情况类似于进程之间的死锁问题,编译器想要成功地编译父亲类,就会要求孩子类在父亲类之前被定义,而孩子类有要求父亲类咸鱼孩子类被定义---显然是自相矛盾的事情

在C++语言,如果一定要实现双向依赖,那么至少有个一个方向的关系必须使用指针实现的若依赖关系;如果类A的头文件中只定义了类B的一个指针,没有使用类B中的任何属性方法,C++编译器就不要求类B在类A之前被定义了,但是仍然要告诉编译器代码中存在一个名为B的一个类

因为双向依赖对系统结构会造成软件代码之间,组件之间,包或者子系统之间的强烈耦合,对于需要适应不同需求和不同平台的系统,当相互依赖的两个包之间,任何一个包的接口发生变化,另外一个包就要相应地进行修改双向依赖使得操作系统的可扩展性,灵活性和可复用性荡然无存了,操作系统适配器层本身就是一个需要适应不同操作系统平台的软件层次,如果因为应用框架层的修改而导致了这一层的修改不是我们需要看到的,所以双向依赖这种方案不应该采用

猜你在找的设计模式相关文章