Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Класс возвращает тип имплементируемого интерфейса. Зачем?

#java


В одном пакете находятся Vector - interface и Vect - class.   Причем класс имплементирует
интерфейс. А в классе есть методы, которые возвращают тип Vector, то есть интерфейса.
Какой в этом смысл?
    


Ответы

Ответ 1



Чтобы не завязываться на конкретную реализацию. Отчасти это принцип инкапсуляции. За счёт использование интерфейса в возвращаемом методе, тот, кто будет использовать класс, будет обращать внимание только на интерфейс, ему не важна реализация оного. Это уменьшает связанность компонентов. К примеру: 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 = new ArrayList(); list.add(new Vect()); list.add(new SuperVect ()); Теперь при прогонке мы с классами можем унифицировано работать: list.forEach(vector -> vector.rotateAndReturn().somethingAndReturn()); Независимо от того, какой это объект на самом деле, за счёт того, что методы возвращают имплементируемый интерфейс, мы работаем с классами унифицировано.

Комментариев нет:

Отправить комментарий