Дизайн на основе правил - PullRequest
       14

Дизайн на основе правил

1 голос
/ 18 августа 2010

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

Каковы наилучшие методы для решения такой проблемы?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 18 августа 2010

Первое, что приходит мне в голову, это Gof ' Design Pattern , называемый Strategy .

Вы кодируете свои правила в объектах Concrete Strategy.Таким образом, вы можете иметь конкретный объект конкретной стратегии, который меняется во времени.Но лучше всего изменить объекты конкретной стратегии, чтобы отразить новое правило, IMHO.

Ссылка на википедию имеет пример на C ++.Но если вы новичок в разработке шаблонов и / или нуждаетесь в дополнительных объяснениях, просто спросите.

2 голосов
/ 18 августа 2010

Я бы также использовал шаблон синглтона, кроме стратегического.Одна из возможных реализаций (хотя она достаточно открыта, если вам нужен гибкий набор правил, вы должны использовать другой класс для сущности «Правило». Однако, так проще понять):

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 *);
};

Конечно, это указание заголовка (ов).Файлы реализации отсутствуют.Надеюсь, это поможет.

0 голосов
/ 18 августа 2010

Вы можете использовать некоторый механизм правил. В Java много движков правил, я не уверен в том, что такое C ++. Эта запись может вам помочь.

...