この記事では主にインターフェイスの分離の原理を紹介します。編集者はそれが非常に優れていると考えたので、参考として紹介します。エディターをフォローして見てみましょう
定義: クライアントは、必要のないインターフェースに依存すべきではありません。あるクラスの別のクラスへの依存は、最小のインターフェースに基づく必要があります。
問題の原因: クラス A はインターフェイス I を通じてクラス B に依存し、クラス C はインターフェイス I を通じてクラス D に依存します。インターフェイス I がクラス A とクラス B の最小インターフェイスでない場合、クラス B とクラス D はそれを実装する必要があります。メソッドは必要ありません。
解決策: 肥大化したインターフェイス I をいくつかの独立したインターフェイスに分割し、クラス A とクラス C がそれぞれ必要なインターフェイスとの依存関係を確立します。つまり、インターフェース分離の原理が採用されています。
インターフェイス分離の原則を説明する例:
(図 1 インターフェイス分離の原則に従わない設計)
この図の意味は次のとおりです: クラス A はメソッド 1、メソッド 2、メソッド 3 に依存します。インターフェイス I では、クラス B はクラス A への依存関係の実装です。クラス C は、インターフェイス I のメソッド 1、メソッド 4、およびメソッド 5 に依存します。クラス D は、クラス C への依存の実装です。クラスBとクラスDについては、どちらも未使用のメソッド(図中の赤文字で示したメソッド)がありますが、インタフェースIが実装されているため、これらの未使用メソッドも実装する必要があります。クラス図に慣れていない人は、プログラム コードを参照して理解することができます。コードは次のとおりです。
interface I { public void method1(); public void method2(); public void method3(); public void method4(); public void method5(); } class A{ public void depend1(I i){ i.method1(); } public void depend2(I i){ i.method2(); } public void depend3(I i){ i.method3(); } } class B implements I{ public void method1() { System.out.println("类B实现接口I的方法1"); } public void method2() { System.out.println("类B实现接口I的方法2"); } public void method3() { System.out.println("类B实现接口I的方法3"); } //对于类B来说,method4和method5不是必需的,但是由于接口A中有这两个方法, //所以在实现过程中即使这两个方法的方法体为空,也要将这两个没有作用的方法进行实现。 public void method4() {} public void method5() {} } class C{ public void depend1(I i){ i.method1(); } public void depend2(I i){ i.method4(); } public void depend3(I i){ i.method5(); } } class D implements I{ public void method1() { System.out.println("类D实现接口I的方法1"); } //对于类D来说,method2和method3不是必需的,但是由于接口A中有这两个方法, //所以在实现过程中即使这两个方法的方法体为空,也要将这两个没有作用的方法进行实现。 public void method2() {} public void method3() {} public void method4() { System.out.println("类D实现接口I的方法4"); } public void method5() { System.out.println("类D实现接口I的方法5"); } } public class Client{ public static void main(String[] args){ A a = new A(); a.depend1(new B()); a.depend2(new B()); a.depend3(new B()); C c = new C(); c.depend1(new D()); c.depend2(new D()); c.depend3(new D()); } }インターフェイスが肥大化しすぎている場合は、インターフェイスは、それに依存するクラスにとって便利です。これらのメソッドは実装クラスに実装する必要がありますが、これは明らかに良い設計ではありません。この設計がインターフェース分離原則に準拠するように変更された場合、インターフェース I を分割する必要があります。ここで、元のインターフェイス I を 3 つのインターフェイスに分割します。 分割設計を図 2 に示します。
interface I1 { public void method1(); } interface I2 { public void method2(); public void method3(); } interface I3 { public void method4(); public void method5(); } class A{ public void depend1(I1 i){ i.method1(); } public void depend2(I2 i){ i.method2(); } public void depend3(I2 i){ i.method3(); } } class B implements I1, I2{ public void method1() { System.out.println("类B实现接口I1的方法1"); } public void method2() { System.out.println("类B实现接口I2的方法2"); } public void method3() { System.out.println("类B实现接口I2的方法3"); } } class C{ public void depend1(I1 i){ i.method1(); } public void depend2(I3 i){ i.method4(); } public void depend3(I3 i){ i.method5(); } } class D implements I1, I3{ public void method1() { System.out.println("类D实现接口I1的方法1"); } public void method4() { System.out.println("类D实现接口I3的方法4"); } public void method5() { System.out.println("类D实现接口I3的方法5"); } }インターフェイス分離原則の意味は次のとおりです: 単一のインターフェイスを確立し、巨大で肥大化したインターフェイスを構築せず、可能な限りインターフェイスを改良し、インターフェース内のメソッドをできるだけ少なくします。言い換えれば、呼び出しに依存するすべてのクラスに対して巨大なインターフェイスを構築しようとするのではなく、クラスごとに専用のインターフェイスを確立する必要があります。この記事の例では、インターフェイス分離の原則を使用して、巨大なインターフェイスを 3 つの専用インターフェイスに変更します。プログラミングでは、1 つの包括的なインターフェイスに依存するよりも、複数の専用インターフェイスに依存する方が柔軟性が高くなります。インターフェースは設計時に外部から設定される「契約」であり、複数のインターフェースを分散定義することで外部からの変更の波及を防ぎ、システムの柔軟性と保守性を向上させることができます。
- インターフェースは、制限内で可能な限り小さくする必要があります。インターフェイスを改良するとプログラミングの柔軟性が向上することは事実ですが、小さすぎるとインターフェイスが多くなり、設計が複雑になります。したがって、それは適度に行う必要があります。
- インターフェースに依存するクラスのサービスをカスタマイズして、必要なメソッドのみを呼び出しクラスに公開し、不要なメソッドを非表示にします。モジュールにカスタマイズされたサービスを提供することに重点を置くことによってのみ、確立される依存関係を最小限に抑えることができます。
- 結束力を高め、外部とのやり取りを減らします。ほとんどのことを達成するためにインターフェイスで使用するメソッドを最小限にします。
以上がJavaにおけるインターフェース分離原理の説明例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

ドリームウィーバー CS6
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、
