2017-02-14 15 views
0

У меня есть 3 класса: A, B и C где оба B и C унаследуют от A. Как B, так и C необходимо реализовать метод, называемый 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, и это напоминает мне мьютекс, с которым я не работал раньше. Есть ли шаблон дизайна для того, что я пытаюсь сделать? Я не хочу заново изобретать колесо, поэтому любые ключевые слова относительно того, что я должен искать, приветствуются.

+0

Какой язык? –

+0

Python, хотя я также доволен независимыми от языка идеями – carence

ответ

1

State Design Pattern кажется излишним для вашего прецедента. Было бы разумно, если бы у вас были более сложные правила для изменений состояния, например, разрешить final_calculation, только если prepare как B, так и C был вызван один раз или что-то в этом роде.

Ваша текущая реализация проста и выглядит хорошо. Вы также можете рассмотреть возможность переименования prepare_state в is_final_calculation_allowed или is_prepare_done, чтобы сделать более понятным.

+0

Спасибо за отзыв, я думаю, я в основном хотел убедиться, что я не делаю то, что кажется действительно странным для других. – carence