У меня есть этот код, который реализует 2 типа дверей. В одной двери есть замок, а в другой нет.
Интерфейс Door прост:
public interface Door {
void open();
void close();
}
Затем у меня есть реализации: LockedDoor и RegularDoor.
public class LockedDoor implements Door {
private Lock lock;
private boolean isOpen;
@Override
public void open() {
if(!lock.isLocked()) {
this.isOpen = true;
}
}
@Override
public void close() {
this.isOpen = false;
}
}
public class RegularDoor implements Door {
private boolean isOpen;
@Override
public void open() {
isOpen = true;
}
@Override
public void close() {
isOpen = false;
}
}
Как видите, функция открытия LockedDoor
открывает дверь, только если замок разблокирован.
Вы можете разблокировать замок, получив его от LockedDoor
и вызвав его функцию разблокировки.
Является ли это нарушением принципа замещения Лискова?
Если да, то какая альтернатива будет хорошей?
isOpen
, заперта дверь или нет :) - person KarelG   schedule 26.04.2018