我目前正面临一个设计问题,希望得到有关如何解决它的建议:
问题
我将用一个例子来说明我的问题注意这只是一个例子:
假设您有一个名为 Pass 的接口(interface),其中列出了方法:
public interface Pass {
public boolean hasPassedA();
public boolean hasPassedB();
public boolean hasPassedC();
}
假设您有一个类实现了这个名为 Assessor 的接口(interface):
public class Assessor implements Pass{
// how should I implement this class ??
}
最后是学生类:
public class Student {
// some code that defines student behaviour not important.
}
那么问题是如何让评估者和学生对象之间的交互更加灵活?
我注意到 Assessor 对象应该是抽象的,因为实际上没有 Assessor 这样的东西,而是有不同类型的 Assessor,例如 Math Assessor 或 English Assessor 等,这反过来将允许我创建不同类型的 Assessor 对象,例如
MathAssessor extends Assessor
EnglishAssessor extends Assessor
这个概念是,如果 Pass 接口(interface)中声明的所有方法都返回 true 并且 subjectAssessor 类中的所有其他方法都返回 true,则 Student 可以通过。
我在评估员类(class)中做什么?我读过适配器设计模式,但没有完全理解这个概念,或者它是否适用于这种情况?
最佳答案
首先,您拥有的Pass
接口(interface)不是很灵活,这可能会带来困难。例如,如果 Pass 的一个实现只需要 hasPassedA,或者您有一个需要 hasPassedA、hasPassedB、hasPassedC 和 hasPassedD 的实现怎么办?然后各种类型的评估员将需要弄清楚要检查哪些通过条件。
一个更灵活的方法可能是做这样的事情。与其使用 Pass 接口(interface),不如使用 Condition 接口(interface)之类的东西(应更改类/接口(interface)的名称以使其对您的域有意义)。
public interface Condition {
// true means the condition passed, false means it did not
boolean evalutate();
}
现在您可以拥有一个 Assessor 类(我不确定这是否正是您的 Assessor 的工作方式,但这只是一个指南):
public class Assessor {
boolean assess(Collection<Condition> conditions) {
for (Condition c : conditions) {
if (!c.evaluate()) {
return false;
}
}
// all conditions passed
return true;
}
}
希望这对您的问题有所帮助。
关于java - 使用 Java 接口(interface)验证对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7391600/