3
|
ivan_ivanovich_ivanoff · 技术社区 · 16 年前 |
![]() |
1
2
你能把这些方法之一变成私有/内部的吗? 这应该确保只有另一个可以被客户机代码调用,并且您总是知道调用的工作方式。 或者,使用容器/元素示例,如下所示:
我不确定这个模式是否有一个通用名称。 |
![]() |
2
8
我会通过重新思考逻辑来处理这个问题。循环依赖性通常是一种迹象,表明某些东西有点…关闭。如果没有对具体问题的深入了解,我就不能更具体地说。 |
![]() |
3
1
我的建议是少考虑代码,多考虑设计。共享操作是否可以抽象为两个类都可以通信的新类?功能是否在两个类之间被错误地共享? 在今年的uni大会上,他们引入了“代码气味”的概念,这是一系列代码需要重新分解的“直觉反应”。也许能帮上忙? 要获得概述,请尝试: Wikipedia Code Smells 或 this book . 也许您可以告诉我们更多关于您试图在代码中表示什么的信息? 我希望这有帮助。 |
![]() |
4
1
对于给定的场景,所提供的解决方案看起来完全可以接受。但这实际上取决于这些行为意味着什么,这些行为是否正确。如果这正是你想要的行为,那么我不确定你是否有问题。
附录:
|
![]() |
5
1
我认为这可以通过类的布尔值全局来解决(当然要使它成为实例变量)。它检查([布尔变量])是否为真;它运行对另一个方法的调用,如果为假,则不为真。仅在if语句内部,将检查设置为假。然后在每个方法的末尾将其设置为true。 不过,我就是这么做的。 |
![]() |
6
0
如果引发异常,您的实现将不会解锁。锁可能很贵,稍微轻一点的方法是使用原子布尔
正如其他人所建议的,更好的方法是编写代码,这样一个写下来就不必调用另一个。相反,您可以有一个方法来调用a和b,这样两个对象就不需要相互了解了。
|
![]() |
7
0
正如其他人所说,我认为在大多数情况下,您应该尽量避免这种情况,并重构代码,这样问题就不会发生。但在某些情况下,这可能不是一个选择,或者完全不可避免。最一般的方法是确保在方法A调用方法B之前(反之亦然),它必须确保A的对象处于立即返回对A的附加调用从而导致no-op的状态。这是非常抽象的,很难应用于具体的类和实现。 以容器和元素类(例如,c和e)为例,其中c有一个方法c.remove(e),e有一个方法e.remove(),您可以这样实现它:
|
![]() |
8
0
函数fooa()再次调用foob()和foob()是一个有效的递归。 递归并不总是必须是调用自身的同一个函数。 那么,我们如何防止递归函数无限循环呢? 有终止条件,对吗? 我想是这样的。但是,我同意其他人关于重新考虑设计并避免此类递归的意见。 下面Simon的解决方案还依赖于诸如
和
|