要件: Java のソケット API によって TCP サーバーを実装します。サーバーは同時に複数のクライアントを処理できます。サーバーは、XML テキスト ファイルに (データ ストレージとして) 項目を追加/削除できます。クライアントは、"addItem"/"removeItem" のようなコマンドをサーバーに送信できます。クライアントが "addItem" を送信した場合、新しいノードを XML ドキュメントに追加する必要があります。
コマンド設計パターンを使用する必要がありますか? もしそうなら、コマンド、レシーバー、インボーカー、クライアントのどれがいいですか?
私の実装は以下のようなものです(コメントのいくつかの質問も):
interface Command{
public void execute();
}
AddItemCommand implements Command{
//The receiver
XMLFileHelper xmlHelper;
//The data need to added to XML file
//This data should be here or not??
ItemNode addedNode;
public AddItemCommand(XMLFileHelper newHelper){
xmlHelper = newHelper;
}
public void execute(){
xmlHelper.addItemNode(addedNode);
}
}
/*this class will handle all the xml doc operation: add, remove ...
i guess, it is should be the receiver
DataHelper in the parent interface, subclass could be XMLFileHelper, DBHelper, MessageQueueHelper ...
*/
public class XMLFileHelper implements DataHelper{
}
RemoveItemCommand implements Command(){
//...............
}
/*This is the invoker, i am not sure what should it be, so i do not have a good name for it.*/
public class Invoker{
Map<String, Command> map = new HashMap<String, Command>();
public void addCommand(String cmdName, Command c){
map.put(cmdName, c);
}
public void processRequest(String reqName){
map.get(reqName).execute();
}
}
TcpServerThread implements Runable{
public void run(){
DataHelper xmlPaser = new XMLFileHelper();
Command cmd1 = new AddItemCommand();
Command cmd2 = new RemoveItemCommand();
Invoker invoker = new Involer();
invoker.addCmd("add", cmd1);
invoker.addCmd("remove", cmd2);
String cmdName = getCommandName(socket.getInputStream());
invoker.processRequest(cmdName);
}
}