Дизайн на основе правил
Я буду регулярно читать некоторые дискретные состояния, и, применяя некоторые правила к различиям в состояниях, я буду сообщать о некоторых ошибках. Правила могут быть изменены во времени.
Каковы лучшие практики для решения такой проблемы?
Благодарю.
3 ответа
Я бы также использовал шаблон синглтона, кроме стратегического. Одна из возможных реализаций (хотя она достаточно открыта, если вам нужен гибкий набор правил, вы должны использовать другой класс для сущности "Правило". Однако, так проще понять):
class Rules {
public:
virtual bool rule_1(Data *) = 0;
// ...
virtual bool rule_n(Data *) = 0;
static Rules * getRules()
{
// The only place in which to change the rule set
if ( ruleSet == NULL ) ruleSet = new Rules_September2010();
return ruleSet;
}
protected:
Rules();
static Rules * ruleSet;
};
class Rules_August2010 : public Rules {
public:
bool rule_1(Data *);
bool rule_n(Data *);
};
class Rules_September2010 : public Rules {
public:
bool rule_1(Data *);
bool rule_n(Data *);
};
Конечно, это указание на заголовок (и). Файлы реализации отсутствуют. Надеюсь это поможет.
Первое, что приходит мне в голову, - это шаблон дизайна Gof под названием " Стратегия".
Вы кодируете свои правила в объектах Конкретной стратегии. Таким образом, вы можете иметь конкретный объект конкретной стратегии, который меняется во времени. Но лучше всего изменить объекты конкретной стратегии, чтобы отразить новое правило, ИМХО.
Ссылка на википедию имеет пример на C++. Но если вы новичок в разработке шаблонов и / или нуждаетесь в дополнительных объяснениях, просто спросите.
Вы можете использовать некоторый механизм правил. В Java много движков правил, я не уверен в том, что такое C++. Этот пост может вам помочь.