【发布时间】:2018-10-06 17:47:18
【问题描述】:
我有实现 2 种门的代码。 一扇门有锁,另一扇没有。
门界面很简单:
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接收它并调用它的解锁函数来解锁。
这是否违反了里氏替换原则?
如果是,有什么好的选择?
【问题讨论】:
-
你的问题在这里更合适:Software Engineering SE
-
为什么你认为你需要两个不同的类?拥有一个 Door 类还不够吗?你只需要检查
isOpen状态是否锁住了门:) -
@KarelG 在引用其他网站时,指出cross-posting is frowned upon 通常会有所帮助
标签: java oop design-patterns solid-principles liskov-substitution-principle