界面分離原理(InterfaceSegregationPrinciple、ISP)が、単一の一般的なを使用することなく、専用のインターフェース、複数のインタフェースの使用を指し、それに依存してはならないクライアントは、インタフェースありません。次の点に注意すべきであるインタフェースの設計で私たちを導く原理:
図1に示すように、クラスに依存するクラスは、インターフェイスの最小値に基づくべきです。
2、単一のインタフェースの確立は、肥大化したインターフェースを作成しないでください。
図3に示すように、インターフェース最小限に抑えることができる改良プロセスとしてインターフェース(良くないが、適切でなければなりません)。
クラスが良い読みやすさ、拡張性と保守性を持つように、私たちの設計思想に沿ってインターフェイスの分離の原則は、多くの場合、高い凝集および低い結合を言います。私たちは、発生場所を変更する可能性を含む、ビジネスモデルを検討するために、時間を費やし、時間のインターフェースの設計について考える必要がいくつか事前に判断を行う必要があります。だから、ビジネスモデルの抽象的に理解するために、それは非常に重要です。IAnimalインターフェース:ここでは、動物の行動要約を書き、コードの一部を見てみましょう。
1つの パッケージcom.lch.test.interfacesegregation。 2 3 パブリック インターフェイスIAnimal { 4 ボイド(食べます)。 5 ボイドフライ(); 6 ボイドSWIM(); 7 }
図から分かるように、鳥の水泳()メソッドが唯一の空の可能性があり、犬のフライ()メソッドは明らかに不可能です。この時点で、我々は異なるインタフェースを設計するためにさまざまな動物の行動に焦点を当て、コードを見て、IEatAnimal、IFlyAnimalとISwimAnimalインターフェースを設計した:
IEatAnimalインタフェース:
パッケージcom.lch.test.interfacesegregation。 パブリック インターフェースIEatAnimal { ボイド)(食べます。 }
パッケージcom.lch.test.interfacesegregation。 パブリック インターフェースIFlyAnimal { ボイドフライ(); }
パッケージcom.lch.test.interfacesegregation。 パブリック インターフェースISwimAnimal { ボイドSWIM(); }
犬のみIEatAnimalとISwimAnimalインターフェースを実現しました。
1つの パッケージcom.lch.test.interfacesegregation。 2 3 パブリック クラス犬実装IEatAnimal、ISwimAnimalを{ 4 5 @Override 6 公共 ボイド食べる(){ 7 8 } 9 10 @Override 11 公共 ボイドSWIM(){ 12 13 } 14 }
のみ達成鳥は、インターフェイスを食べて飛びます
1つの パッケージcom.lch.test.interfacesegregation。 2 3 インポートjdk.nashorn.internal.ir.IfNode。 4 5 パブリック クラスバード実装IEatAnimal、IFlyAnimal { 6 @Override 7 公共 ボイドは(食べる){ 8 } 9 10 @Override 11 公共 ボイドが飛ぶ(){ 12 } 13 }
図比較UMLクラス次のように