- natalia.kaczynska.programista@gmail.com
Menu
Single Responsibility (zasada pojedynczej odpowiedzialności)
Załóżmy, że chcemy stworzyć program, który będzie odpowiadał za manipulację tekstem.
Poniżej przedstawiam przykład pokazujący jak złamana zostaje zasada pojedynczej odpowiedzialności:
public class TextManipulator {
private String text;
public TextManipulator(String text) {
this.text = text;
}
public String appendText(String newText){
text = text.concat(newText);
return text;
}
public String findWordAndDelete(String word) {
if (text.contains(word)) {
text = text.replace(word, "");
}
return text;
}
public void printText() {
System.out.println(text);
}
public void printWords() {
String[] words = text.split(" ");
for (String word : words) {
System.out.println(word);
}
}
}
Widzimy , że w powyższym kodzie klasa odpowiada zarówno za manipulację tekstem, jak i wyświetlanie całego tekstu i poszczególnych słów. Dlatego zasada pojedynczej odpowiedzialności została złamana.
Teraz prezentuję jak poprawnie powinien wyglądać ten przykład. Tak więcnależy utworzyć dwie oddzielne klasy – jedna będzie odpowiedialna wyłacznie za manipulację tekstem, a druga za jego wyświetlanie:
public class TextManipulator {
private String text;
public String getText() {
return text;
}
public TextManipulator(String text) {
this.text = text;
}
public String appendText(String newText){
text = text.concat(newText);
return text;
}
public String findWordAndDelete(String word) {
if (text.contains(word)) {
text = text.replace(word, "");
}
return text;
}
}
public class TextPrinter {
private TextManipulator textManipulator;
public TextPrinter(TextManipulator textManipulator) {
this.textManipulator = textManipulator;
}
public void printText() {
System.out.println(textManipulator.getText());
}
public void printWords() {
String[] words = textManipulator.getText().split(" ");
for (String word : words) {
System.out.println(word);
}
}
}