(Zasada jednej odpowiedzialności)
Każdy moduł lub klasa powinna mieć odpowiedzialność za pojedynczą część funkcjonalności zapewnianej przez oprogramowanie, a odpowiedzialność ta powinna być w całości zawarta w klasie, module lub funkcji. Klasa powinna mieć jeden i tylko jeden powód do zmiany.
Robert C.Martin (Uncle Bob)
Pomimo, że zasada ta wydaje się łatwa do wdrożenia, istnieje w niej pewna trudność: czasami bardzo trudno jest uchwycić moment, kiedy klasa zaczyna robić więcej niż jedną rzecz.
</> Lepszy przykład niż wykład
✘ Błędny kod
Klasa Cat zajmuje się wydawaniem dźwięku kota i polowaniem na mysz. Ponieważ jest odpowiedzialna ze dwie funkcjonalności, narusza SRP.
public class Cat {
public void makeSound() {
System.out.println("Wydaję dźwięk kota.");
}
public void huntMouse() {
System.out.println("Poluję na mysz.");
}
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
cat.makeSound();
cat.huntMouse();
}
}
✔ Prawidłowy kod
Klasę Cat zastąpimy klasami:
- CatSound odpowiadającą za wydawanie dźwięku kota
- CatHunting odpowiadającą za polowanie na mysz
public class CatSound {
public void makeSound() {
System.out.println("Wydaję dźwięk kota z wykorzystaniem osobnej klasy.");
}
}
public class CatHunting {
public void huntMouse() {
System.out.println("Poluję na mysz z wykorzystaniem osobnej klasy.");
}
}
public class Main {
public static void main(String[] args) {
CatSound catSound = new CatSound();
CatHunting catHunting = new CatHunting();
catSound.makeSound();
catHunting.huntMouse();
}
}
Teraz każda z klas wykonuję tylko jedną rzecz.
