インターフェイス分離の原則(Interface Segregation Principle)

SOLID原則のひとつ。
クライアントが使用しないメソッドへの依存を、強制すべきではない。
インターフェイスの具象クラスでは、メソッドの実装が強制される。

つまり、具象クラスで不要なメソッドの作成が強制されないように、小さなインターフェイスを作る必要がある。

悪い例

格闘について考える。

public interface IFighting
{
  public void Punch();
  public void Kick();
  public void TakeDown();
  public void Choke();
}

ボクシング、キックボクシング、レスリング、柔術などは格闘の一環のため、IFightingの具象クラスとした場合。
ボクシングにKick()、TakeDown()、Choke()
キックボクシングにTakeDown()、Choke()
レスリングにPunch()、Kick()、Choke()
柔術にPunch()、Kick()
など不要なメソッドの実装を強制してしまう。

改善案

クライアント(ボクシング、キックボクシング、レスリング、柔術)が使う単位でインターフェイスを分離する。

public interface IHandStriking
{
  public void Punch();
}
public interface IFootStriking
{
  public void Kick();
}
public interface IThrowing
{
  public void TakeDown();
}
public interface IGrappling
{
  public void Choke();
}
public class Boxing : IHandStriking{}
public class KickBoxing : IHandStriking, IFootStriking{}
public class Wrestling : IThrowing{}
public class JiuJitsu : IThrowing, IGrappling{}