所以假设我有一个Door类和一个Lock类。 Door类的实例具有lock
属性,该属性是Lock类的实例。
我希望门“拥有”它的锁的实例,但我不希望门能够改变它自己的锁。例如,我不希望这是可能的:
class FancyDoor extends Door {
function unlockMyself() {
$this->lock->locked = false;
}
}
但我确实希望其他课程可以使用门锁。例如,我需要一个DoorMan课程才能锁定和解锁门。所以它并不像将所有Lock属性设为私有一样简单。
这样做有什么模式吗?我主要使用PHP,但答案确实需要特定于语言。提前谢谢。
答案 0 :(得分:0)
我假设您关注的是,一旦FancyDoor编码而没有 unlockMyself
方法,将来某些开发人员会无意中添加它并搞砸合同。
如果lock
由Door
拥有,考虑到类的本质,避免这种情况将非常困难。我能想到以下几点:
Door
没有lock
个实例。Lock
被建模为一个单独的类。你可以使用State Pattern,因为:
lock
和unlock
除外。Window
s。它不需要与Door
s。DoorManager
或由这两个对象组成的东西。此类公开了锁定/解锁它所拥有的Door
实例的方法。基本上,DoorManager
负责一个Door
,以及与之关联的Lock
。