Java中解释了单一责任原则 +示例
#solid #java #srp

单一责任原则(SRP)是软件设计的坚实原则之一,该原则规定班级只能具有一个更改的责任或理由。在Java中,可以多种方式实施SRP。这是其中一些:

  • 每个责任的单独类别:您可以为每个责任创建单独的类,例如输入处理,数据处理和输出渲染。这样,每个班级只有一个责任。
  • 使用界面:您可以为每个责任定义接口并单独实施。这样,每个班级只有一个责任,您可以轻松地交换实现,而不会影响代码的其余部分。
  • 抽象类:您可以使用抽象类来定义共同行为,然后创建实现特定职责的具体类。这样,您可以确保每个班级只有一个责任。

由开发人员根据项目的特定要求和约束选择最佳方法。

srp可以以更大的规模应用,然后称为关注点分离:将代码分开为模块,每个代码负责特定功能。这样,每个模块只有一个责任。

示例:Java中的SRP使用每个责任的单独类

问题描述:

Java应用程序读取文件中的数值数据,找到平均值然后输出结果。

解决方案

  1. 为输入处理创建一个单独的类:

    public class InputHandler {
        public static List<Double> readData(String filename){
            // Code to read data from file
        }
    }
    

    此类负责处理输入数据并从文件中读取它。它只有一个责任,即从文件中读取数据。
    资源

  2. 创建一个用于数据处理的单独类:

    public class DataProcessor {
        public static double calculateAverage(List<Double> data) {
            // Code to perform calculations on data
        }
    }
    

    此类负责处理输入数据并计算平均值。它只有一个责任,即对输入数据进行计算。

  3. 创建一个单独的类以输出渲染:

    public class OutputRenderer {
        public static void displayResults(double result) {
            // Code to render output
        }
    }
    

    此类负责渲染输出并显示结果。它只有一个责任,即以用户友好的方式渲染输出。

  4. 最后,创建一个主要类以将所有内容绑在一起:

    public class Main {
        public static void main(String[] args) {
            String filename = input.txt;
            List<Double> data = InputHandler.readData(filename);
            double result = DataProcessor.calculateAverage(data);
            OutputRenderer.displayResults(result);
        }
    }
    

    此主类简单地调用输入处理,数据处理和输出渲染类的方法,以读取输入数据,处理IT并显示结果。

我们将测试此实施以进行将来的变化。

更改请求:

客户端要求您从两个文件中读取数据,
解决方案:您只需要更改 Inpunthandler 并仅测试它,因此更改的范围较小且易于测试。

第二个更改请求:

第一行是输出的标题,因此您需要以格式显示输出

解决方案:创建用于保存数据和标题的新类。

public class Main {
    public static void main(String[] args) {
        String filename = input.txt;
        List<Double> data = InputHandler.readData(filename);
        double result = DataProcessor.calculateAverage(data);
        OutputRenderer.displayResults(result);
    }
}

您需要更改 inpunthandler dataProcessor outputrenderer ,但每个类更改的原因仍然只有一个,因为每个类都只有一个责任:

  • inpunthandler 正在读取文件和填充dataholder class
  • dataprocessor 计算是相同的,只有参数才更改。
  • outputrenderer 更改输出以匹配格式

解决方案的主要类:

public class Main {
    public static void main(String[] args) {
        String filename = input.txt;
        DataHolder data = InputHandler.readData(filename);
        data = DataProcessor.calculateAverage(data);
        OutputRenderer.displayResults(data);
    }
}

结论

通过将责任分为不同的班级,您可以确保每个班级只有一个责任,这使得代码更易于维护,测试和扩展。

单一责任原则是指南,帮助您在路径之间进行选择,应该浮动您的有意识的思想,当编码alwas问自己做方法/class/class/interface/appracts class/pockage时,只有一个责任或只有一个改变的原因。