2013-08-30 1 views
0

У вас есть банкомат с 3 состояниями и 2 способами. если это phesudo-реализация шаблона.Общее поведение в состояниях состояния состояния

01-- class AbstractATMState 
02-- Operation1 
03-- Operation2 
04-- 
05-- class State1 : AbstractATMState 
06-- Operation1 
07-- Operation2 
08-- 
09-- class State2 : AbstractATMState 
10-- Operation1 
11-- Operation2 
12-- 
13-- class State3 : AbstractATMState 
14-- Operation1 
15-- Operation2 

Если Operation1 имеет такое же поведение для 3-х государств, вы просто поставить реализацию на Operation1 в строке 02, но что, если Operation1 имеет ту же реализацию только 2 государств и другую реализацию для третьего? как бы вы решили эту проблему, не повторяя свой код?

P.S. это, конечно, очень упрощенный пример ситуации, но в той же концепции будет сказано 40 штатов с 7 операциями, которые будут реализованы.

+0

Это выглядит очень домашнее задание. Вы должны попробовать что-то, а затем рассказать нам о любых проблемах, которые у вас могут возникнуть, вместо того, чтобы просить нас сделать это за вас. – Mattsjo

+0

Я убил его, пытаясь найти аккуратное решение, но не смог найти его! – Sisyphus

ответ

0

Положите определение для Operation1 в AbstractATMState и переопределите его в State3.

Поместите его в строку 2, а затем введите другую реализацию в строке 14. Когда вы вызываете его из State3, он будет использовать линеаризацию (посмотрите, если хотите), чтобы получить наиболее подходящую версию, его собственный класс, если он существует, а не базовый класс. Но это займет версию базового класса для State1 и State2, поэтому вам не нужно будет предоставлять им свои собственные реализации.

+0

Это работает только для простого сценария выше, вот почему я написал P.S. линия внизу. Но что, если у нас есть 10 состояний с 2 ​​операциями с Operation1, имеющими 4 разных импликации, состояния от 1 до 3 используют реализацию Operation1, состояния с 4 по 6 используют другое выполнение, состояния 7 и 8 используют другое, а состояние 9 и 10 использует другое ? – Sisyphus