Файлы импорта шаблонов проектирования изменяют поведение

#import #design-patterns #state

#импорт #шаблоны проектирования #состояние

Вопрос:

Я разрабатываю приложение, в котором программа может выполнять ряд операций. Это зависит от импортируемого XML-файла и установленного подключения к БД. Однако некоторые функции могут работать без импортированного XML-файла, а некоторые могут работать, только если XML импортирован или только если подключена БД.

Итак, мой вопрос в том, какой шаблон проектирования я должен использовать для моделирования этого? Я читал о шаблоне состояния, в котором поведение объекта изменяется относительно текущего состояния. Это хороший способ сделать это? Например, у меня может быть несколько состояний: XML_FILE_IMPORTED_ONLY, DB_CONNECTED_ONLY, XML_IMPORTRED_AND_DB_CONNECTED, NOTHING_IMPORTED и на основе текущего состояния объекта будут доступны соответствующие функции?

Любая помощь будет высоко оценена.

С уважением,

Petar

Ответ №1:

У вас есть два конечных автомата, каждый из которых контролирует часть вашего общего состояния. Каждый конечный автомат будет выполнять переходы независимо от другого.

XML импортировал Statemachine

Начальное состояние: не импортировано

  1. Не импортировано. переходы: «происходит импорт» -> Импортировано.
  2. Импортировано. переходы: «выгрузка» -> Не импортировано.

Состояние машины подключения к БД

Начальное состояние: не подключен

  1. Не подключен. переходы: «подключение выполнено успешно» -> Подключено.
  2. Подключено. переходы: «отключить» -> Не подключен.

Редактировать: конечные автоматы являются излишними для этой проблемы. Каждый из рассматриваемых конечных автоматов имеет два состояния с одним переходом в каждом направлении. Гораздо лучшим способом представить эту ситуацию было бы использовать boolean переменную.

 boolean dbConnected;
boolean xmlImported;
  

Комментарии:

1. Большое вам спасибо. Я очень рад, что мои рассуждения верны 🙂 Я бы любезно попросил вас, если вы можете дать мне какой-нибудь базовый псевдокод относительно того, как я могу реализовать идею, которую вы предлагаете.