我目前面临设计问题,希望能就如何解决这个问题提出建议:

问题

我将使用一个示例来说明我的问题注释,这只是一个示例:

假设您有一个名为Pass的接口,其中列出了方法:

public interface Pass {
  public boolean hasPassedA();
      public boolean hasPassedB();
      public boolean hasPassedC();
}

假设您有一个实现此接口的类称为Assessor:
public class Assessor implements Pass{
// how should I implement this class ??
}

最后学生班:
public class Student {
  // some code that defines student behaviour not important.
}

问题是,如何使评估者和学生对象之间的交互更加灵活?

我注意到的是,Assessor对象应该是抽象的东西,因为实际上不存在Assessor这样的东西,但是您却拥有不同类型的评估器,例如Math Assessor或English Assessor等,这反过来又使我创建不同类型的Assessor对象,例如
MathAssessor extends Assessor
EnglishAssessor extends Assessor

概念是,如果在Pass接口中声明的所有方法都返回true,并且subjectAssessor类中的所有其他方法都返回true,则Student可以通过。

我在评估班上做什么?我已经阅读了有关适配器设计模式的信息,但还没有完全理解该概念,或者它甚至适用于这种情况?

最佳答案

首先,您拥有的Pass接口不是很灵活,这可能会带来麻烦。例如,如果一个Pass实现仅需要hasPassedA,或者您具有需要hasPassedA,hasPassedB,hasPassedC和hasPassedD的实现,该怎么办?然后,各种类型的评估员将需要找出要检查的合格条件。

执行此操作的一种更灵活的方法可能是执行类似的操作。而不是具有Pass接口,可能类似于Condition接口(应该更改类/接口的名称,以使其对您的域有意义)。

public interface Condition {

   // true means the condition passed, false means it did not
   boolean evalutate();
}

现在您可以拥有一个Assessor类(我不确定这是否正是您的评估者的工作方式,但这只是一个准则):
public class Assessor {

   boolean assess(Collection<Condition> conditions) {
      for (Condition c : conditions) {
        if (!c.evaluate()) {
           return false;
        }
      }
      // all conditions passed
      return true;
   }
}

希望这对您的问题有所帮助。

08-03 17:33