オブザーバー パターンに問題があります。Observer と Subject は両方ともインターフェースであるべきだと言っています。オブザーバーがインターフェースである理由はわかりましたが、サブジェクトを抽象クラスにしたほうがよいのはなぜですか? 少なくとも削除/登録を実装できませんでしたか?
5 に答える
設計パターンは、アプリケーションの特定のニーズに適応することを意図しています。彼らは石で設定されたルールを規定していません。特に、何かが抽象クラスであるかインターフェースであるかは、その決定がアプリケーションの残りの部分に及ぼすすべての影響を考慮して、ユーザーが決定する必要があります。
とは言っても、いくつかの理由から、一般的には抽象クラスよりもインターフェースが推奨されます。たとえば、抽象クラスでは継承を使用する必要があり、多くの言語では複数のクラスから継承することはできません。それがユースケースの問題ではない場合は、より便利な抽象クラスを使用してください。
Subject を実装する抽象クラスを作成しないのはなぜですか? インターフェイスを使用すると、柔軟性が向上します。抽象クラスから始めても、実際には何も得られません。物事が大きく変化する場合 (たとえば、プロセスの境界を越える場合)、Observable は抽象的な実装に固執します。
インターフェイスという言葉が使用されるデザイン パターンでは、異なる具体的な実装を持つクライアント コンポーネントに公開される抽象 API を意味します。
設計パターン インターフェースが Java ワールドにマップされる場合、それは Java インターフェースまたは Java 抽象クラスのいずれかであり、設計パターンの具体的なクラスは Java の通常のクラス (非抽象) にマップされます。
ただし、決定を下す際には、Java インターフェイスと抽象クラスの違いとその目的、および長所と短所を理解する必要があります。