Single Responsibility (zasada pojedynczej odpowiedzialności)

single respobsibility principle - 59 / 5 000 a man wonders which cutting tool to choose

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);
        }
    }
}

Przewijanie do góry