В одном пакете находятся Vector - interface и Vect - class. Причем класс имплементирует интерфейс. А в классе есть методы, которые возвращают тип Vector, то есть интерфейса. Какой в этом смысл?
Ответ
Чтобы не завязываться на конкретную реализацию. Отчасти это принцип инкапсуляции. За счёт использование интерфейса в возвращаемом методе, тот, кто будет использовать класс, будет обращать внимание только на интерфейс, ему не важна реализация оного. Это уменьшает связанность компонентов.
К примеру:
public interface Vector{
public Vector rotateAndReturn();
public Vector somethingAndReturn();
[...]
}
public class Vect implement Vector{
public Vector rotateAndReturn(){
// поворачиваем
return this;
}
public Vector somethingAndReturn(){
// что-то делаем
return this;
}
}
Зачем? Смысл появится, когда, к примеру, новую реализацию Vector захотите делать:
public class SuperVect implement Vector{
public Vector rotateAndReturn(){
// поворачиваем
return this;
}
public Vector somethingAndReturn(){
// что-то делаем
return this;
}
}
Теперь можно так:
Vector vector = new Vect();
vector1.rotateAndReturn().somethingAndReturn();
Можно тогда экземпляр другого класса создать и так же вызывать:
vector = new SuperVect ();
vector1.rotateAndReturn().somethingAndReturn();
Плюшка в использовании коллекции:
List
Теперь при прогонке мы с классами можем унифицировано работать:
list.forEach(vector -> vector.rotateAndReturn().somethingAndReturn());
Независимо от того, какой это объект на самом деле, за счёт того, что методы возвращают имплементируемый интерфейс, мы работаем с классами унифицировано.
Комментариев нет:
Отправить комментарий