インターフェイス分離の原則(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{}