决定可以调用哪个函数的锁

时间:2017-02-14 10:29:33

标签: design-patterns

我有3个课程:ABC,其中BC都来自ABC都需要实现名为prepare的方法,该方法可能被称为x次,一旦准备阶段完成,函数final_calculation可能会调用。我正在考虑让两个班级都有boolean切换,这取决于我们是否处于准备阶段。如果我们处于准备阶段,则只能调用prepare函数,否则只调用final_calculation函数。所以A看起来像这样:

class A:

def __init__(self):
    self.prepare_state = True

def toggle_state(self):
    self.prepare_state = not self.prepare_state

def prepare(self):
    if self.prepare_state is False:
        raise StateError

def final_calculation(self):
    if self.prepare_state is True:
        raise StateError

这有意义吗?它让我想起了一些Singleton或State模式,它让我想起了一个我以前从未真正使用过的互斥体。是否有我想要做的设计模式?我不想重新发明轮子,所以欢迎任何关于我应该搜索的关键词。

1 个答案:

答案 0 :(得分:1)

State Design Pattern似乎对您的用例来说太过分了。如果您有更复杂的状态更改规则,例如仅当final_calculationprepare的{​​{1}}被调用一次时才允许B,或者某事

您当前的实施很简单,看起来不错。您还可以考虑将C重命名为prepare_stateis_final_calculation_allowed,以使事情更加清晰。