Refactoring #001 Extract Method

Example

    public void startup() {
        ServerSocket serverSocket = null;
        try {
            serverSocket = new ServerSocket(10000);
            System.out.println("The server is listening on 10000 port ...");
            while (true) {
                serve(serverSocket.accept());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

/

    private ServerSocket createServerSocket(final int port) throws IOException {
        ServerSocket result = new ServerSocket(port);
        return result;
    }

    private void printPrompt(final String prompt) {
        System.out.println(prompt);
    }

    private void startWorking(final ServerSocket serverSocket) throws IOException {
        while (true) {
            Socket socket = serverSocket.accept(); // 关于引用放 while外面还是里面有激烈的争论,我的结论是放里面。
            createServerThread(socket);
        }
    }

    public void startup() {
        try {
            ServerSocket serverSocket = createServerSocket(PORT);
            printPrompt("The server is listening on " + PORT + " port ...");
            startWorking(serverSocket);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Note

为什么要 Extract Method?主要体现在“可读性”和“代码复用”上:

  1. 函数的粒度越小被复用的机会越大
  2. 免去写注释,因为代码读起来就像是一系列注释
  3. 如果函数都是细粒度,方便覆写(ps.这条不理解)

Extract Method 的手段:

  1. 直接提取一段代码。(用一个方法代替注释)
  2. 把局部变量作为参数传递给方法。
  3. 把对局部变量的操作转化为一个查询。(类似于 getOutputcreateXxx
原文地址:https://www.cnblogs.com/xkxf/p/8275125.html