Zasada segregacji interfejsów mówi o tym, by wszystkie metody z interfejsów były używane w klasach, w których ten interfejs jest implementowany. Co za tym idzie, interfejs powinien mieć jak najmniej metod.
W poniższym przykładzie został stworzony interfejs MusicPlayer, który ma 2 metody playMP3 oraz playCD. Są też 3 klasy, każda z nich implementuje interfejs MusicPlayer, jendak 2 z nich używają tylko jednej metody.
public interface MusicPlayer {
public void playMP3();
public void playCD();
}
public class MP3Player implements MusicPlayer{
public void playMP3(){
//playMP3
}
}
public class CDPlayer implements MusicPlayer{
public void playCD(){
//playCD
}
}
public class MicroMusicSystem implements MusicPlayer{
public void playCD(){
//playCD
}
public void playMP3(){
//playMP3
}
}
Można stwierdzić wiec, że interfejs jest zbyt ogólny, gdyż niektóre metody dla poszczególnych klas są nieprzydatne, nie mają zastosowania. By kod był zgodny z zasadą segregacji interfejsów, należy go podzielić na 2 interfejsy, w którym będzie po jednej metodzie.
public interface MP3playable {
public void playMP3();
}
public interface CDplayable {
public void playCD();
}
public class MP3Player implements MP3playable {
public void playMP3(){
//playMP3
}
}
public class CDPlayer implements CDplayable {
public void playCD(){
//playCD
}
}
public class MicroMusicSystem implements MP3playable, CDplayable {
public void playCD(){
//playCD
}
public void playMP3(){
//playMP3
}
}
W poprawionym kodzie widzimy, że klasy zawsze wykorzystują wszystkie metody z implementowanych interfejsów, więc nasz kod jest bardziej przejrzysty, interfejsy bardziej konkretne, co jest zgodne z omawianą zasadą.