2

Open-Closed Principleのウィキペディアのページ(2013 年 2 月 27 日現在) には、継承によって実現されていると書かれています。

Open/Closed Principleという名前は、2つの方法で使用されています。どちらの方法も継承を使用して明らかなジレンマを解決しますが、目標、手法、および結果は異なります。

「2 つの方法」とは、Meyer の実装の継承と、より一般的なポリモーフィック拡張を指します。

とにかく、私の質問は、継承を使用しないFaçadeパターンについてです。より複雑なサブシステム (またはライブラリ) への単純化されたインターフェイスの形で抽象化を定義するため、これは Open-Closed Principle と見なすこともできませんか? すなわち:

サブシステム (またはライブラリ) は、Façade を使用するクライアントへの拡張用に開かれており、そのインターフェイスは変更に対して閉じられています

それとも、情報隠蔽の境界を広げているだけなのでしょうか (OCP に非常に近く、特にProtected Variationsと見なす場合)。

4

1 に答える 1

1

いいえ、Facade パターンは OCP とは異なる問題に対処します。ファサードは、他のいくつかのクラスの前に立つクラスです。Facade は、そのクライアントをフロントのクラスの変更から隔離しますが、それは OCP ではありません。OCP は、要件の変化に応じて個々のクラスがどのように変化するかに関するものです。ファサードについては、これらの変更を導くように設定されていません。Facade に対するクライアントの要件が変化すると、Facade も変化します。Facade が気にかけている方法で Facade が直面しているクラスのいずれかが変更された場合、Facade も同様に変更されます。

OCP に従うようにセットアップされた Facade のバージョンを想像することができます。おそらく、クライアントへのインターフェイスが、変更のために閉じられているが、新しい要件に対応するために拡張できるインターフェイスまたは抽象クラスである Facade です。実際、私は常にそのように Facade を実装しましたが、それは Facade の古典的な説明の一部ではありません。

于 2016-02-14T04:13:22.457 に答える