コンセプトを見てください
①高レベルのモジュールは、どちらも自分の抽象に依存している必要があり、低レベルのモジュールに依存してはなりません
②抽象的、詳細に頼るべきではありません、詳細は抽象依存すべき
③依存関係反転がコアアイデアです:指向プログラミング・インターフェース
④依存反転をデザインコンセプトに基づいています。相対的な変動の詳細、抽象的な物事はるかに安定。詳細に構築されたアーキテクチャよりも安定した基盤を構築するための抽象ベースのアーキテクチャ。Javaでは、抽象化は、インターフェイスを参照または抽象クラスであり、その特定のカテゴリの詳細
⑤ インターフェースや抽象クラスの目的を使用すると良い標準を開発することであるが、完了するために、その実装クラスの詳細を表示するには、任意の特定の操作を必要としません。
依存関係3つの配信方法があります。
①インタフェース
②施工方法転送
配送方法③setter
注意事項や詳細
①下位層モジュールは、抽象クラスまたはインタフェース、またはその両方を使用しようとするように良好な安定性プログラム
②できるだけ多くの抽象クラスやインターフェイスなので、私たちの変数の参照で、プログラムは拡大を支援し、最適化する実際のオブジェクトの間にバッファ層が存在するようなタイプの変数を宣言
③相続、フォローする必要性(説明するの見出しの横)の交換で原則を
再び単語を強調する:コアが[指向プログラミング・インターフェース]の依存逆転あります
コードの依存関係反転原理に従っていませんでしたいくつかを見てください
1 // マイル朱 2 パブリック クラスDependecyInversion { 3。 4。 // 試験 5。 公共 静的 ボイドメイン(文字列[]引数){ 6 人の人= 新しい新規人物(); 7 person.receive(新しい新しいメールに()); 8 } 9。 10 } 11 12れる //は最初の電子メール・クラスを作成し、直接ワード印刷する方法がある 13は、 クラスEメール{ 14 公衆ストリングGETINFO(){ 15 リターン「電子メールメッセージ:こんにちは、世界」; 16 } 17 } 18である 19。 20 //は、メッセージ送信するために、Personクラスを作成し 21である クラス人{ 22は、 公共 ボイドザは、(メールに電子メールで)受信{ 23で のSystem.out.println(email.getInfo()); 24 } 25 }
解釈:このコードは、メール/ SMS送信機能誰かを実現することです。このコードは非常に単純で、メール情報を送信する対応する方法を有している最初のクラスを作成します。その後、メッセージを送信するには、このメソッドEmialクラスを呼び出すためにPersonクラスを作成します。しかし、この時間ならば、人は、電子メールが、マイクロ手紙、QQ、SMSを送信していませんか?また、これは人ではそれぞれの方法などrecive_wechatの増加を必要とします。。。。または受け取るオーバーロードされたために、しかし、この設計者およびクラスに依存しすぎて。このように実際の開発では実現不可能であることは明らかです。
ソリューション:設計し、このインタフェースを実装する適切なクラスに情報を送信し、必要としている人のみが受信インタフェースに依存することができますがすることができます。具体的にコードを見て
1 パブリック クラスDependecyInversion { 2 3。 公共 静的 ボイドメイン(文字列[]引数){ 4。 // クライアントは変更する必要はありません 5。 人人= 新しい新規人物(); 6 person.receive(新しい新しいメールに()); 7 。8 person.receive (新しい新しいWeixin()); 9 } 10 11 } 12である 13である // インタフェースの定義 14 インタフェースIReceiver { 15 公衆ストリングGETINFO(); 16 } 17 18である クラスメールで実装IReceiver { 19。 公共ストリングGETINFO(){ 20が 復帰「電子メールメッセージ:こんにちは、世界」; 21である } 22れる } 23で 24 // マイクロチャネル増加 25 クラス Weixinを実装IReceiver { 26は 公衆ストリングGETINFO(){ 27 リターン "マイクロチャネルメッセージ:こんにちは、OK" ; 28 } 29 } 30 31である // 実施例2つの 32 クラス人{ 33である //ここでは、インターフェイスに依存して 34である 公共 ボイドは、受信(IReceiverレシーバ){ 35 のSystem.out.println(receiver.getInfo()); 36 } 37 }
再び単語を強調する:コアが[指向プログラミング・インターフェース]の依存逆転あります
再び単語を強調する:コアが[指向プログラミング・インターフェース]の依存逆転あります
再び単語を強調する:コアが[指向プログラミング・インターフェース]の依存逆転あります