繁体   English   中英

使用Java接口验证对象

[英]Verifying Objects using Java interfaces

我目前正面临设计问题,并希望了解如何解决它:

问题

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

假设您有一个名为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对象应该是抽象的东西,因为实际上没有评估者这样的东西,而是你有不同类型的评估者,如数学评估员或英语评估员等,这反过来将允许我创建不同类型的Assessor对象,例如

MathAssessor extends Assessor
EnglishAssessor extends Assessor

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

我在Assessor课上做什么? 我已经阅读过有关适配器设计模式的内容,但还没有完全理解这个概念,或者它是否适用于这种情况?

首先,你拥有的Pass接口不是很灵活,这可能会带来困难。 例如,如果Pass的一个实现只需要hasPassedA,或者你有一个需要hasPassedA,hasPassedB,hasPassedC和hasPassedD的实现,该怎么办? 然后,各种类型的评估员需要确定要检查的通过条件。

更灵活的方法可能是做这样的事情。 可能类似于Condition接口(类/接口的名称应该更改为对您的域有意义),而不是具有Pass接口。

public interface Condition {

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

现在你可以有一个评估员课程(我不确定这是否正是评估员的工作方式,但这只是一个指导原则):

public class Assessor {

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

希望这有助于解决您的问题。

首先,要回答有关适配器模式的问题,它不适用于此处。 您使用适配器模式在两个不兼容的系统之间添加一个层,以允许它们来回传递数据。

使用您的示例,我建议在Assessor中编写hasPassed_()方法的默认实现,即使实现只是抛出一个新的UnsupportedOperationException(回答关于如果特定Assessor只需要hasPassed_()的子集的问题你只能覆盖你需要的方法)。 您可以修改主题评估者(例如MathAssessor,EnglishAssessor等)。在调用super.hasPassed_()之前,将Pass方法更具体或提供额外的检查(具体取决于您的具体实现)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM