Я никогда не был так хорош в дизайне, потому что существует так много разных возможностей, и у всех есть плюсы и минусы, и я никогда не уверен, какой из них выбрать. В любом случае, вот моя проблема: мне нужно, чтобы множество разных слабо связанных классов имели проверку. Однако для некоторых из этих классов потребуется дополнительная информация для проверки. Я хочу иметь метод validate, который можно использовать для проверки объекта, и я хочу определить, можно ли проверить объект с помощью интерфейса, скажем 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 этого не делает. t поддерживает это, поэтому он вроде как не работает, но 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 Object является допустимым.
Подробнее здесь:
https://stackoverflow.com/questions/182 ... interfaces