家系モジュールの使用法に応じて、共通の関係を明確で直接的な属性として(グラフを隠して)表示することは上位レベルモジュールと家系モジュールの間の結合を遥かに軽くでき、モジュールの使用になんの影響も与えることなく内部表現を完全に変更することを可能にします。それは単一責務の法則を強制することにも繋がります。最終的に、もし最初の一般化された拡張可能なグラフアプローチが一番拡張可能に思えるのであれば、家系モジュールの利用は更に特殊化及び単純化された関係の実装がアプリケーションに対して十分であることを示しているかもしれませんし、より効率的なシステムを作成する手助けになるかもしれません。この例でのモジュール間の相互関係の抽象化は下位レベルモジュールのインターフェースの単純化だけでなく、より単純化された実装につながるかもしれません。...)に対するクライアントを実装しなければならないケースを想像してください。あなたはそのクライアントに抽象インターフェースを持たせる事を考えるでしょう。...ローカルファイル、リモートファイルの両方が同じ抽象インターフェースを提供する場合、ローカルファイルと完全に実装された依存性逆転パターンを使用するどんな上位レベルモジュールもローカルとリモートの区別なくファイルにアクセスすることが可能になります。可能であればそれらを統一する方法を決めておく必要があります。リモートファイルに対しては、作成と置換のみを行う必要があるかもしれません(ローカルファイルに比べてリモートファイルのランダムアップデートはあまりに遅く、実装も難しくなる可能性があるので、リモートファイルの更新は意味をなさない)。リモートファイルに対して部分的な読み込みと書き込みを行う必要があるかもしれません(少なくともリモートファイルモジュールの内部では通信中断後のダウンロードとアップロードの再開をできるようにする必要がある)。ローカルキャッシュを利用している場合を除き、ランダムリードは適しません。OS、特にタグや全文検索に依存し、異なるシステムでも実装する事ができます。並行実行される置換または削除の検出は、他の抽象インタフェースに影響を与える可能性があります。(必ずしも全てが要求されるわけではない)を良く考える必要があります。どのようにリモートファイルサーバーの機能を実装するかだけでなく、アプリケーション内に既に存在するファイルサービス(ローカルファイル、既にあるクラウドクライアントなど)と新たしいリモートファイルサーバークライアントの間で整合を取るかについても同様に考える必要があります。必要なインターフェースの設計が完了したら、リモートファイルサーバークライアントはこれらのインターフェースを実装すべきです。(例えばファイル更新など)について制限を加えたい場合、同じ抽象インタフェースを提供するローカルまたは他の既存のリモートファイルアクセスモジュール用のアダプタを記述する必要があるかもしれません。コンピュータ上に構成されている利用可能なファイル互換システムを検索するために独自のファイルアクセス列挙子を記述しておく必要もあります。これらが完了すると、アプリケーションはドキュメントをローカルとリモートに透過的に保存する事が可能になります。簡単に言うと、新しいファイルアクセスインターフェースを使用している上位レベルモジュールは使用の際にローカルとリモートファイルにアクセルするシナリオを意識する必要がなくなり、再利用性が向上します。この手の機能を実装し始めているため、新規実装のクライアントをこの既に存在している抽象モデルへ適用するのは控えた方が良いかもしれません。この例では、モジュールを抽象インターフェースのセットとして考え、このインターフェースのセットに他のモジュールを適合させることで、様々なファイルストレージシステムに対し、共通のインターフェースを提供する事ができます。アプリケーションレイヤーパッケージは主に具象クラスを含んでいて、コントローラーは抽象/インターフェース型を含んでいます。インスタンスを保持し、全てのパッケージは物理的に分離されていて。クラスが使用する具象クラスの実装が存在しています。よって動的に生成されます。実装したどの具象パッケージも参照する必要がない事です。コンクリートクラスはリフレクションを使用してロードされます。クラスに変更を及ぼさずに他の具象実装に差し替える事ができます。通信する事ができます。両者はインターフェースでリンクされているからです。関連するパターン[編集]依存性逆転の原則の適用はアダプターパターンの一例と見ることもできます。上位レベルクラスが自身が依存する抽象への固有のアダプターインターフェースを定義するような場合がそれに当たります。アダプティーの実装はまたアダプターインターフェスに依存しますが(もちろん、このインターフェースを実装しているので)独自の下位レベルモジュール内のコードを用いて実装を行うこともできます。上位レベルモジュールは、アダプティーとその下位レベルモジュールによって実装されたインターフェースへのポリモーフィックな関数を呼び出すことによってアダプターインターフェースを介して間接的に下位レベルモジュールを利用するため、上位レベルモジュールが下位レベルモジュールに依存するといったことはありません。容易にする目的で導入されます。第2版』SBクリエイティブ、163頁。978-4-7973-4778-4。2012年6月21日閲覧。2016年10月15日閲覧。2011年7月14日時点のオリジナル[リンク切れ]よりアーカイブ。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。Cookieに関する声明モバイルビュ。