Pregunta

Me leerá regularmente algunos estados discretos, y la aplicación de algunas reglas a las diferencias en los estados que reportará algunos errores. Reglas se puede cambiar en el tiempo.

¿Cuáles son las mejores prácticas para resolver un problema?

Gracias.

¿Fue útil?

Solución

También tendría que utilizar el patrón Singleton, aparte de la Estrategia. Una posible implementación (aunque esto es bastante abierto, si quieres un conjunto flexible de las reglas que deberían poner utiliza otra clase para la entidad "Regla" Sin embargo, esta forma es más fácil de entender.):

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

Por supuesto, esto es una indicación de la cabecera (s). Los archivos de implementación faltan. Espero que esto ayude.

Otros consejos

Lo primero que viene a la mente es el Gof' de patrones de diseño llama < a href = "http://en.wikipedia.org/wiki/Strategy_pattern" rel = "noreferrer nofollow"> Estrategia .

codificar sus reglas en el hormigón objetos Estrategia. Por lo que podría tener un hormigón objeto particular de estrategia que está cambiando en el tiempo. Pero lo mejor es cambiar de estrategia concreta de objetos para reflejar la nueva norma, en mi humilde opinión.

El enlace Wikipedia tiene un ejemplo en C ++. Pero si usted es nuevo en los patrones de diseño y / o la necesidad de más explicaciones al respecto, solo pregunte.

Se puede utilizar algún motor de reglas. Hay gran cantidad de motores de reglas en Java, no estoy seguro ABT C ++. Este posterior pueden ayudarle.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top