मैं की तरह नीचेजावा - सामान्य प्रकार का एक उदाहरण टी
public class Server<T extends RequestHandler> {
public void start() {
try{
this.serverSocket = new ServerSocket(this.port, this.backLog);
} catch (IOException e) {
LOGGER.error("Could not listen on port " + this.port, e);
System.exit(-1);
}
while (!stopTheServer) {
socket = null;
try {
socket = serverSocket.accept();
handleNewConnectionRequest(socket);
} catch (IOException e) {
LOGGER.warn("Accept failed at: " + this.port, e);
e.printStackTrace();
}
}
}
protected void handleNewConnectionRequest(Socket socket) {
try {
executorService.submit(new T(socket));
} catch (IOException e) {
e.printStackTrace();
}
}
}
लेकिन handleNewConnectionRequest(...)
विधि में, मैं टी का एक उदाहरण नहीं बना सकते एक सर्वर लिख रहा हूँ बनाने के लिए कैसे के रूप में यह वास्तव में एक वर्ग नहीं है । इसके अलावा मैं here का उल्लेख विधि का उपयोग नहीं कर सकता क्योंकि मैं socket
उदाहरण पास करना चाहता हूं ताकि अनुरोध हैंडलर और InputStream
socket
पर प्राप्त कर सके।
मैं ऊपर की तरह एक सामान्य सर्वर नहीं कर सकते हैं और विभिन्न प्रोटोकॉल हैंडलर
public class HttpRequestHandler extends RequestHandler {
...
}
public class FtpRequestHandler extends RequestHandler {
...
}
public class SmtpRequestHandler extends RequestHandler {
...
}
जैसे और फिर उन्हें तरह
नीचेServer<HttpRequestHandler> httpServer = new Server<HttpRequestHandler>();
Server<FtpRequestHandler> ftpServer = new Server<FtpRequestHandler >();
Server<SmtpRequestHandler> smtpServer = new Server<SmtpRequestHandler >();
+1। या सर्वर को RequestHandlerFactory का उपयोग करें और सर्वर को एक बार आवश्यकता होने पर प्रत्येक फ़ैक्टरी को RequestHandler बनाने के लिए कहें। –
@JBNizet अरे, इससे भी बेहतर! मुझे ओओ डिज़ाइन के लिए वास्तव में अच्छे दोस्त होने के लिए अमूर्त कक्षाएं/कार्यान्वयन और प्रकार पैरामीटर मिल गए हैं। –