我从来没有这么擅长设计,因为有很多不同的可能性,它们都有优点和缺点,我永远不知道该选择哪一个。无论如何,这是我的问题,我需要许多不同的松散相关的类来进行验证。但是,其中一些类需要额外的信息来进行验证。我想要一个validate
可用于验证 Object 的方法,并且我想确定 Object 是否可以通过接口验证,比如Validatable
. 以下是我可以拥有的两个基本解决方案。
interface Validatable {
public void validate() throws ValidateException;
}
interface Object1Validatable {
public void validate(Object1Converse converse) throws ValidateException;
}
class Object1 implements Object1Validatable {
...
public void validate() throws ValidateException {
throw new UnsupportedOperationException();
}
}
class Object2 implements Validatable {
...
public void validate() throws ValidateException {
...
}
}
这是第一个解决方案,我有一个通用的全局接口,可以验证的东西实现并且我可以validate()
用来验证,但 Object1 不支持这个,所以它有点失效,但 Object2 确实支持它,许多其他类也可以。
或者,我可以拥有以下内容,这将使我没有顶级界面。
interface Object1Validatable {
public void validate(Object1Converse converse) throws ValidateException;
}
class Object1 implements Object1Validatable {
...
public void validate(Object1Converse converse) throws ValidateException {
...
}
}
interface Object2Validatable {
public void validate() throws ValidateException;
}
class Object2 implements Object2Validatable {
...
public void validate() throws ValidateException {
...
}
}
我认为我遇到的主要问题是我有点坚持拥有顶级接口的想法,因此我至少可以说 X 或 Y 对象是可验证的。