寻找特定的设计模式

时间:2009-04-30 05:51:46

标签: design-patterns

我正在寻找描述某种情况的模式。也许有人知道一些事情,可以给我一个提示

情境类型A的对象,1:n与B类对象的关联。示例:一个人及其所有宠物。宠物对象具有年龄数据成员。现在每个人都应该有一个数据成员,以了解他的宠物的平均年龄。我不希望保存和加载这些信息,但要在加载过程中计算(所有必要的信息已经存在,所以它有点冗余,但我想要person对象中的信息)。

问题那么我怎样才能以面向对象的方式做到这一点?是否有描述这种情况的模式?我的第一个想法是让一个ComputedFieldsUpdater类接受一个pet对象,然后计算所有尚未加载的字段。但我想知道这是否是正确的方法,或者是否有更优雅的解决方案?

感谢您的想法。

2 个答案:

答案 0 :(得分:1)

如果为类型B的关联创建一个类,则相当简单:无论如何,您需要某种列表。所以只需创建一个“PetList”或类似的东西,它有一个方法“averageAge()”,它从所有它的宠物计算这个值。

现在,您可以致电person.getPets().averageAge()来访问平均值。

从面向对象的角度来看,平均值的信息不应该直接在Person-object中。

答案 1 :(得分:0)

它不是Gang of Four设计模式,但是当绝对必要存储计算冗余的数据时,普遍接受的解决方案是延迟加载它,然后保留一个布尔值值来描述它是否仍然有效。

换句话说:

class Person
{
List<Pet> myPets;
float averageAge;
boolean isAgeValid = false;

float getAverageAge()
{
    if(isAgeValid)
        return averageAge;
    else
        ...calculate age, save it in averageAge, set bool to true, and return derived float...
}

//all list operations should mark the bool false
void Add(Pet p)
{
    myPets.Add(p);
    isAgeValid=false;
}
}