【发布时间】:2012-05-01 21:01:14
【问题描述】:
所以我今天参加了计算机科学入门课程的考试。其中一个问题是关于装饰器设计模式的,它给我带来了一些麻烦。我的问题不是关于正确答案是什么,而是这是否是一个使用装饰器模式的好例子。为什么要装饰人员层次结构,因为它同样容易并且需要更少的类来让 Population 类直接计算人员的 BMI?既然 BMI 是 Person 对象状态的派生属性,那么装饰器真的会在这种情况下添加功能吗?
问题:
interface Person(){
double getWeightInKG();
double getHeightInMeters();
}
鉴于上面的人接口使用装饰器模式来实现下面定义的人口类。 BMI 的计算公式为 BMI = 体重(公斤)/身高(米)^2。您可能必须设计和实现其他类和接口来实现这一点。假设您使用了 java.util.ArrayList。
+ Population:
- public void addPerson(Person p);
- public void removePerson(Person p);
- public double getAverageBMI();
- public Person[ ] getPeopleInBMIRange(double bmi_min, bmi_max);
- public int populationSize();
【问题讨论】:
-
因为“人口”是人的集合。它不是BMI计算器,也不应该是。我对在人群中开始使用特定于 BMI 的功能有点怀疑——这似乎更像是您要从人群中过滤出的信息。
-
@Dave,完全同意 BMI 特定功能不应该属于人口类别。
-
我是一名 Java 教师,因此我了解创建使用设计模式的简单玩具领域作业的难度。 DP 根本不适合任何过于简单化的东西。
标签: java design-patterns decorator