Сущности:
1. Персонаж. Каждый имеет уникальные, динамические характеристики, которые могут зависеть от разных факторов.
2. Действующий эффект. Имеет оставшееся время.
3. Данные эффекта. Статические, все возможные эффекты заданы заранее и не меняются.
4. Список действующих эффектов.

Код:
// Персонаж
class Character {
var agility:Number;
var strength:Number;
var effects:EffectList;
var needUpdateStats:Boolean;
}
// Действующий эффект
class Effect {
var id:Uint;
var remaining:Number;
}
// Данные эффекта
class EffectData {
var id:Uint;
var name:String;
var bonusAgility:Number;
var bonusStrength:Number;
}
// Список действующих эффектов
class EffectList {
// Просто список с Effect, диспетчерезирующий события добавления/удаления.
}
Lazy update:
Персонаж подписан на свой список эффектов, при изменений в нём устанавливает флаг needUpdateStats в true. Когда необходимо получить актуальные значения параметров персонажа, например, через геттер, проверяется этот флаг и в случае true - выполняется перерасчёт. (lazy update)
Это примерный рецепт. Конкретная реализация зависит от проекта, сущностей, связей и т.д.