只能由其他人更改的类属性的模式



假设我有一个Door类和一个Lock类。Door类的实例有一个lock属性,它是Lock类的一个实例。

我希望门"拥有"它的锁的实例,但我不希望门能够改变自己的锁。例如我不希望这是可能的:

class FancyDoor extends Door {
    function unlockMyself() {
        $this->lock->locked = false;
    }
}

但是我确实想要一个门的锁可以被其他类访问。例如,我需要一个DoorMan类来锁定和解锁门。所以这并不是把所有的Lock属性都设为私有那么简单。

有这样做的模式吗?我主要在PHP工作,但答案确实需要是特定的语言。

我猜你担心的是,一旦FancyDoor在没有 unlockMyself方法的情况下编码了,将来某些开发人员可能会无意中添加它并破坏合同。

如果lockDoor拥有,考虑到类的本质,避免这种情况将非常困难。我能想到如下:

  • Door没有lock实例。
  • Lock被建模为一个单独的类。你可以使用状态模式,因为:
    • 你可能想要添加更多的状态,除了lockunlock,在未来。
    • 相同的类可以在将来重用以使用,例如Window s。它不需要与Door s绑定。
  • 一个DoorManager或由这两个物体组成的东西。该类公开了用于锁定/解锁Door实例的方法。

本质上,DoorManager负责一个Door,以及与之相关联的Lock

最新更新