我在寫一個充當前端控制器的Java servlet。爲了執行功能,我使用了域命令模式。目前,我正在初始化所有命令並將它們存儲在一個映射中,命令的名稱(字符串)作爲鍵和對象作爲值。每當servlet接收的請求,我通過URL將命令傳遞查詢作爲獲取地圖中的命令:Servlet和命令模式,編譯vs運行時?
// at init
Hashmap<String, DomainCommand> commands = new Hashmap<String, DomainCommand>();
commands.put("someCommand", new SomeCommand());
// at request
String command = request.getParameter("command");
DomainCommand c = commands.get(command);
c.execute();
這工作得很好,我想要做什麼,因爲我的DomainCommands沒有階級屬性被線程之間共享。另一種方法是使用反射來創建對象,如下所示:
String command = request.getParameter("command");
DomainCommand c = Class.forName(command).newInstance(); // assuming in same (default) package
c.execute();
這兩個工作。從節省性能/記憶的角度來看哪個更好?
這是一個學校項目,所以我必須自己實現大部分功能,但是謝謝你回答我的問題。 – 2012-02-06 21:14:29