抽象类VS枚举(通用OOP)

时间:2013-03-30 20:11:56

标签: oop

我真的找不到如何确定哪个选项最好。我有一个“产品”类,它有一个“推荐年龄”,用于喂食动物,以及其他属性。

请注意,我只想为每个物种提供不同的推荐值的值,我不关心它们的数值等价物(用判别联盟代表什么,但由于ORM问题,我不能使用它)。

作为“RecommendedAge”,可能的值根据Animal de Product目标的类型而有所不同,我不知道以下哪种方法(或任何其他方法)是最好的(所有伪代码):

Class Product {
    Id id;
    String name;
    RecommendedAge recommendedAge;
}

AbstractClass RecommendedAge {
}

Class DogRecommendedAge : RecommendedAge {
    readonly const Int Big;
    readonly const Int Small;
}

Class CatRecommendedAge : RecommendedAge {
    readonly const Int Medium;
    readonly const Int Tiny;
}

或类似的东西:

AbstractClass Product {
    Id id;
    String name;
}

Enum DogRecommendedAge {
    Big = 0;
    Small = 1;
}

Enum CatRecommendedAge {
    Medium = 0;
    Tiny= 1;
}

Class DogProduct : Product {
    DogRecommendedAge dogRecommendedAge;
}

Class CatProduct : Product {
    CatRecommendedAge catRecommendedAge;
}

这可能是一个非常愚蠢的,但我被卡住了。谢谢大家。

1 个答案:

答案 0 :(得分:0)

如果只是在运行时而不是在编译时存储推荐的年龄呢?在你的伪:

class RecommendedAges { 
  readonly const RecommendedAge dog = new RecommendedAge(2, 5); // example value
  readonly const RecommendedAge cat = new RecommendedAge(3, 4); // example value 
}

Class Product {
    Id id;
    String name;
    RecommendedAge recommendedAge;
}

Product p = new Product(1, 'dog food', RecommendedAges.dog);