В объектно-ориентированном программировании, «неизменяемый Интерфейс» — это шаблон для проектирования неизменяемого объекта.[1][2][3] Неизменяемый интерфейс включает в себя определение типа, который не предоставляет никаких методов, которые могут изменить состояние. Объекты, на которые ссылается этот тип, выглядят как неизменяемые.
Рассмотрим класс java, который представляет собой двухмерную точку.
public class Point2D {
private int x;
private int y;
public Point2D(int x, int y) { this.x = x; this.y = y; }
public int getX() { return this.x; }
public int getY() { return this.y; }
public void setX(int newX) { this.x = newX; }
public void setY(int newY) { this.y = newY; }
}
Класс Point2D является изменяемым: его состояние может быть изменено после создания, если вызвать один из методов-сеттеров (setX()
или setY()
).
Неизменяемый интерфейс для Point2D может быть определен как:
public interface ImmutablePoint2D {
public int getX();
public int getY();
}
Сделав Point2D реализующим ImmutablePoint2D, код клиента теперь может использовать тип, который не имеет изменяющих методов, и, таким образом, остается неизменяемым. Это демонстрируется в следующем примере:
ImmutablePoint2D point = new Point2D(0,0); // на конкретный экземпляр Point2D ссылается неизменяемый интерфейс
int х = point.getX(); // допустимый вызов метода
point.setX(42); // ошибка компиляции: метод setX() не существует в типе ImmutablePoint2D
Имея только неизменяемый интерфейс, невозможно вызвать метод, который изменяет состояние конкретного объекта.
public void mutate(ImmutablePoint2D point) {
((Point2D)point).setX(42); // допустимый вызов, поскольку
// аргумент point был приведен к типу Point2D
}
Альтернативой неизменяемому интерфейсу является шаблон неизменяемая обёртка.
Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .