1

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

我希望门“拥有”它是 Lock 的实例,但我不希望门能够更改自己的锁。例如,我不希望这成为可能:

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

但我确实希望其他班级可以使用门锁。例如,我需要一个 DoorMan 类来锁定和解锁门。因此,这并不像将所有 Lock 属性设为私有那么简单。

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

4

1 回答 1

0

我假设您担心的是,一旦 FancyDoor没有方法编码,unlockMyself将来某些开发人员可能会无意中添加它并搞砸合同。

鉴于类的性质,如果lock是,避免这种情况将非常困难。Door我可以想到以下几点:

  • Door没有lock实例。
  • Lock被建模为一个单独的类。您可以使用状态模式,因为:
    • 您可能希望在未来添加更多状态,除了lockunlock
    • 将来可以重用同一个类来与Windows 一起工作。它不需要与Doors 绑定。
  • DoorManager由这两个对象组成的一个或某物。此类公开了用于锁定/解锁Door它拥有的实例的方法。

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

于 2016-10-10T06:51:12.687 回答