java - 使用 Java 接口(interface)验证对象

标签 java interface design-patterns

我目前正面临一个设计问题,希望得到有关如何解决它的建议:

问题

我将用一个例子来说明我的问题注意这只是一个例子:

假设您有一个名为 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/

相关文章:

java - 具有特定JDK的Gradle构建项目

java - java中如何实现类的自关联?

xcode - NSButton "text only"点击时突出显示的变体?

c# - 嵌套接口(interface)和抽象实现类

Delphi - 从类和接口(interface)继承(适配器模式)?

javascript - 将 Mediator 模式与 webpack 和 ES6 模块导入导出结合使用

java - 我想在java中5秒后从对象的函数中获取返回值

Java XML DOM - 如何使用 Element.getAttributeNS

design-patterns - 数据属性表 vs 许多小表

java - 与接口(interface)隔离原则相反