オブジェクト向け設計-インタフェース分離の原則
3797 ワード
概要
インタフェース分離原則(Inteface Segregation Principle,ISP)とは、設計時に異なる機能を異なるインタフェースに定義するか、単一の総インタフェースではなく機能区分に従って複数の専門インタフェースを定義し、クラス依存を実現するために不要なインタフェース(方法)を避けることを意味し、別の角度から理解すると、クラスはできるだけ少ないインタフェースや実装クラスに依存すべきである.プログラムの冗長性と複雑さを軽減します.
深く理解する
インタフェース分離の原則は、アーキテクチャ設計者がインタフェースを設計する際に以下のキーに注意することを指導する.あるクラスの他のクラス(インタフェースの実装クラス)への依存は、最小のインタフェースの上に を確立すべきである.は複数の専門的なインタフェースを確立することができ、膨大で肥大化したインタフェース を確立しないでください.インタフェース機能を適切に区分し、インタフェースの方法はできるだけ少ない(適度) .
コードの例
以下、ブランド自動車を例に、その行為を抽象的に説明する.自動車インタフェース ハーバーVV 7自動車 テスラModel 3 トヨタデュアルエンジンカムリ
以上の例では、ハーバーVV 7は純ガソリン車であり、充電動作はない.反対にテスラモデル3は純電気自動車で、ガソリンを注ぐ行為はない.トヨタのカムリは2エンジン(ガソリン+バッテリー)車なので、ガソリンを注ぐことも充電することもできます.異なるブランドの異なる車種を見ることができ、実現する必要がない方法もあり、この場合、異なるタイプの車種の行為特性に対してインタフェースをそれぞれ設計することができる.は従来の自動車インタフェースを再構築し、公共行為特性 を保持する.ガソリン車インターフェースと電気自動車インターフェース を追加する.は3種類の自動車を再構築する:再構築後のインタフェースの多重性は より高くなった.
まとめ
インタフェース分離の原則は高集約、低結合の設計思想に合致し、クラスに良好な可読性、多重性、拡張性、メンテナンス性を持たせることができる.インタフェースを設計する際には,後で変更が発生する可能性のある場所を予断するなど,ビジネスモデルを考えるのに時間がかかる.
インタフェース分離原則(Inteface Segregation Principle,ISP)とは、設計時に異なる機能を異なるインタフェースに定義するか、単一の総インタフェースではなく機能区分に従って複数の専門インタフェースを定義し、クラス依存を実現するために不要なインタフェース(方法)を避けることを意味し、別の角度から理解すると、クラスはできるだけ少ないインタフェースや実装クラスに依存すべきである.プログラムの冗長性と複雑さを軽減します.
深く理解する
インタフェース分離の原則は、アーキテクチャ設計者がインタフェースを設計する際に以下のキーに注意することを指導する.
コードの例
以下、ブランド自動車を例に、その行為を抽象的に説明する.
//
public interface Car {
//
void start();
//
void run();
//
void refuel();
//
void charge();
}
// VV7
public class HavalVV7 implements Car{
@Override
public void start() {
//
}
@Override
public void run() {
// 、
}
@Override
public void refuel() {
// 、
}
@Override
public void charge() {
// ,
}
}
// VV7
public class HavalVV7 implements Car{
@Override
public void start() {
//
}
@Override
public void run() {
// 、
}
@Override
public void refuel() {
// 、
}
@Override
public void charge() {
// ,
}
}
// Model3
public class TeslaModel3 implements Car {
@Override
public void start() {
//
}
@Override
public void run() {
// 、
}
@Override
public void refuel() {
// ,
}
@Override
public void charge() {
// 、
}
}
//
public class ToyotaCamry implements Car {
@Override
public void start() {
//
}
@Override
public void run() {
// 、
}
@Override
public void refuel() {
// 、 、
}
@Override
public void charge() {
// 、 、
}
}
以上の例では、ハーバーVV 7は純ガソリン車であり、充電動作はない.反対にテスラモデル3は純電気自動車で、ガソリンを注ぐ行為はない.トヨタのカムリは2エンジン(ガソリン+バッテリー)車なので、ガソリンを注ぐことも充電することもできます.異なるブランドの異なる車種を見ることができ、実現する必要がない方法もあり、この場合、異なるタイプの車種の行為特性に対してインタフェースをそれぞれ設計することができる.
//
public interface Car {
//
void start();
//
void run();
}
//
public interface OilCar extends Car{
// void refuel();
}
//
public interface ElectricCar extends Car {
//
void charge();
}
// VV7 :
public class HavalVV7 implements OilCar{
@Override public void start() {
// }
@Override public void run() {
// 、 }
@Override public void refuel() {
// 、 }
}
// Model3:
public class TeslaModel3 implements ElectricCar {
@Override
public void start() {
//
}
@Override
public void run() {
// 、
}
@Override
public void charge() {
// 、
}
}
// :
public class ToyotaCamry implements OilCar,ElectricCar {
@Override
public void start() {
//
}
@Override
public void run() {
// 、
}
@Override
public void refuel() {
// 、 、
}
@Override
public void charge() {
// 、 、
}
}
まとめ
インタフェース分離の原則は高集約、低結合の設計思想に合致し、クラスに良好な可読性、多重性、拡張性、メンテナンス性を持たせることができる.インタフェースを設計する際には,後で変更が発生する可能性のある場所を予断するなど,ビジネスモデルを考えるのに時間がかかる.