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
?主要体现在“可读性
”和“代码复用
”上:
- 函数的粒度越小被复用的机会越大
- 免去写注释,因为代码读起来就像是一系列注释
- 如果函数都是细粒度,方便覆写(ps.这条不理解)
Extract Method
的手段:
- 直接提取一段代码。(用一个方法代替注释)
- 把局部变量作为参数传递给方法。
- 把对局部变量的操作转化为一个查询。(类似于
getOutput
,createXxx
)