この記事では主に Java の依存関係逆転原理の定義と問題の解決策を紹介しますので、興味のある方はぜひ一緒にご覧ください
定義: 高レベルのモジュールは低レベルのモジュールに依存すべきではなく、両方とも依存すべきです。抽象化に依存しないでください。詳細は抽象化に依存する必要があります。
問題の原因: クラス A はクラス B に直接依存しています。クラス A をクラス C に依存するように変更したい場合は、クラス A のコードを変更する必要があります。このシナリオでは、通常、クラス A は複雑なビジネス ロジックを担当する高レベル モジュールであり、クラス B と C は基本的なアトミック操作を担当する低レベル モジュールです。クラス A が変更されると、プログラムに不要なリスクが生じます。
解決策: インターフェイス I に依存するようにクラス A を変更します。クラス B とクラス C はそれぞれインターフェイス I を実装します。クラス A はインターフェイス I を介してクラス B またはクラス C に間接的に接続されているため、クラス A を変更する可能性が大幅に減少します。 。反転の原理は、詳細の変動に比べて、抽象的なもののほうがはるかに安定しているという事実に基づいています。抽象化に基づいて構築されたアーキテクチャは、詳細に基づいて構築されたアーキテクチャよりもはるかに安定しています。 Java では、抽象化はインターフェイスまたは抽象クラスを指し、詳細は特定の実装クラスを指します。インターフェイスまたは抽象クラスを使用する目的は、特定の操作を行わずに仕様と規約を作成することであり、詳細を実装クラスに示すタスクは残ります。完了。
依存関係逆転の原則の核となる考え方は、インターフェイス指向プログラミングです。インターフェイス指向プログラミングが実装指向プログラミングよりも優れている理由を説明するために、引き続き例を使用します。母親は本を与えられれば、その本に従って子供に物語を語ることができるのです。コードは次のとおりです:
class Book{ public String getContent(){ return "很久很久以前有一个阿拉伯的故事……"; } } class Mother{ public void narrate(Book book){ System.out.println("妈妈开始讲故事"); System.out.println(book.getContent()); } } public class Client{ public static void main(String[] args){ Mother mother = new Mother(); mother.narrate(new Book()); } }
昔、アラブの物語がありました...
ある日、うまく実行されれば。要求は次のようになります: 反対 その本は代わりに新聞社に渡され、母親は新聞でその話をするよう求められました:
class Newspaper{ public String getContent(){ return "林书豪38+7领导尼克斯击败湖人……"; } }
抽象インターフェイス IReader を紹介します。単語がある限り、読み上げは読み上げです:
interface IReader{ public String getContent(); } Mother类与接口IReader发生依赖关系,而Book和Newspaper都属于读物的范畴,他们各自都去实现IReader接口,这样就符合依赖倒置原则了,代码修改为: class Newspaper implements IReader { public String getContent(){ return "林书豪17+9助尼克斯击败老鹰……"; } } class Book implements IReader{ public String getContent(){ return "很久很久以前有一个阿拉伯的故事……"; } } class Mother{ public void narrate(IReader reader){ System.out.println("妈妈开始讲故事"); System.out.println(reader.getContent()); } } public class Client{ public static void main(String[] args){ Mother mother = new Mother(); mother.narrate(new Book()); mother.narrate(new Newspaper()); } }
昔、アラビア語の物語がありました…お母さんが物語を語り始めました
この変更後は、将来クライアント クラスがどのように拡張されても、マザー クラスを変更する必要はありません。これは単純な例にすぎません。実際の状況では、高レベルのモジュールを表すマザー クラスが、変更が必要になると、エラーが発生するリスクが非常に高くなります。したがって、依存関係逆転の原則に従うと、クラス間の結合が減少し、システムの安定性が向上し、プログラムの変更によって引き起こされるリスクが軽減されます。
依存関係逆転の原則の採用により、複数人による並列開発に大きな利便性がもたらされます。たとえば、上記の例では、Mother クラスと Book クラスが直接結合されている場合、Mother クラスは Book クラスが結合されるのを待つ必要があります。 Mother クラスは Book クラスに依存するため、コード化する前にコード化する必要があります。 Mother クラスと Book クラスは相互に関係がないため、変更されたプログラムは相互に影響を与えることなく同時に起動できます。共同開発に関わる人数が増え、プロジェクトが大規模になるほど、依存関係を引き起こす原則を採用することが重要になります。現在人気の TDD 開発モデルは、依存関係逆転の原理を最もうまく適用したものです。
上記の例で使用した依存関係の転送方法には、コンストラクターメソッドの転送とセッターメソッドの転送の2つがあると思います。依存関係の転送方法についてはよくわかりません。
以上がJava における依存関係逆転原理の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。