1

では、Door クラスと Lock クラスがあるとします。Door クラスlockのインスタンスには、Lock クラスのインスタンスであるプロパティがあります。

ドアにロックのインスタンスを「所有」させたいのですが、ドアが独自のロックを変更できるようにしたくありません。たとえば、これを可能にしたくない:

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

しかし、ドアのロックに他のクラスがアクセスできるようにしたい. たとえば、ドアのロックとロック解除を行うには、DoorMan クラスが必要です。したがって、すべての Lock プロパティを非公開にするだけでは簡単ではありません。

これを行うためのパターンはありますか?私は主に PHP で作業していますが、答えは言語固有である必要があります。前もって感謝します。

4

1 に答える 1

0

あなたの懸念は、FancyDoor がメソッドなしでコーディングunlockMyselfされると、将来、一部の開発者がうっかりメソッドを追加してコントラクトを台無しにする可能性があることだと思います。

クラスの性質上、lockが によって所有されている場合、これを回避することは非常に困難です。Door次のことが考えられます。

  • Doorlockインスタンスがありません。
  • Lock別のクラスとしてモデル化されています。次の理由により、状態パターンを使用できます。
    • 今後、lockと以外の状態を追加することもできます。unlock
    • 同じクラスを再利用して、Window将来 s などを操作できます。sと結び付ける必要はありませんDoor
  • これらのDoorManager2 つのオブジェクトで構成される 、または何か。Doorこのクラスは、それが持つインスタンスをロック/ロック解除するためのメソッドを公開します。

基本的に、DoorManagerは 1 つDoorの とLockそれに関連付けられた を担当します。

于 2016-10-10T06:51:12.687 に答える