Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';这种违反单一责任原则的行为有什么好处_Java_Oop_Design Patterns - Fatal编程技术网

Java 什么';这种违反单一责任原则的行为有什么好处

Java 什么';这种违反单一责任原则的行为有什么好处,java,oop,design-patterns,Java,Oop,Design Patterns,此代码取自org.glassfish.jersey.grizzly2项目,如方法名称所示,createHttpServer应负责创建和返回HttpServer类的实例,我只是想知道为什么要以这种方式封装HttpServer.start调用 public static HttpServer createHttpServer(final URI uri, final GrizzlyHttpContainer

此代码取自
org.glassfish.jersey.grizzly2
项目,如方法名称所示,
createHttpServer
应负责创建和返回
HttpServer
类的实例,我只是想知道为什么要以这种方式封装
HttpServer.start
调用

public static HttpServer createHttpServer(final URI uri,
                                              final GrizzlyHttpContainer handler,
                                              final boolean secure,
                                              final SSLEngineConfigurator sslEngineConfigurator
                                              final boolean start) {

        final String host = (uri.getHost() == null) ? NetworkListener.DEFAULT_NETWORK_HOST : uri.getHost();
        final int port = (uri.getPort() == -1) ? DEFAULT_HTTP_PORT : uri.getPort();

        final NetworkListener listener = new NetworkListener("grizzly", host, port);
        listener.setSecure(secure);
        if (sslEngineConfigurator != null) {
            listener.setSSLEngineConfig(sslEngineConfigurator);
        }

        final HttpServer server = new HttpServer();
        server.addListener(listener);

        // Map the path to the processor.
        final ServerConfiguration config = server.getServerConfiguration();
        if (handler != null) {
            config.addHttpHandler(handler, uri.getPath());
        }

        config.setPassTraceRequest(true);

        if (start) {
            try {
                // Start the server.
                server.start();
            } catch (IOException ex) {
                throw new ProcessingException(LocalizationMessages.FAILED_TO_START_SERVER(ex.getMessage()), ex);
            }
        }

        return server;
    }

我看到的唯一优势是用户必须编写更少的代码。我完全不同意这种做法。如果它说“创建”,那么它应该只创建。无论如何,只要文件中明确规定,这样做应该是“可以的”。。。这不是我见过的最严重的违反SRP的行为…

这是一个公共API方法,不是一个类。 说

每个类都应该有一个单独的职责,并且该职责应该完全由类封装

SRP旨在实现松耦合和健壮性。它肯定有助于开发人员在保持功能良好的同时维护相同的功能

所以,如果它是某种内部方法或类,我会同意的


公共API的设计目标完全不同

  • 首先要确保的是易用性
  • 您的软件也应该隐藏实现和设计的内部特性
  • 如果用户正在调用此方法,并且不知道需要调用其他方法来启动,那么他/她会感到困惑。我们不能强迫用户了解软件的整个工作流程,即手动调用每个小步骤
希望这有帮助。

不,他们没有,请自己查看代码。