是否有根据类型创建类的设计模式或任何其他方式?
我的服务器收到一条json消息,其中包含要执行的操作。
我有几个Action类,应该映射到相应的类。
{ TYPE: 'MOVE' ... } => class ActionMove
{ TYPE: 'KILL' ... } => class ActionKill
(所有Action类都实现了Action接口)。
如何根据类型创建类?
答案 0 :(得分:4)
如果您需要跟踪您的操作实例(例如日志),请使用Factory Pattern:
public class ActionFactory{
public Action createAction(String type){
if (type.equals("MOVE"))
return new ActionMove();
if (type.equals("KILL"))
return new ActionKill();
... // so on for the other types
return null; //if the type doesn't have any of the expected values
}
...
}
答案 1 :(得分:2)
创建一个HashMap映射字符串到Action对象:
Map<String,Action> map = new HashMap<String,Action>();
map.put("MOVE", new ActionMove());
map.put("KILL", new ActionKill());
然后获得首选值:
Action a = map.get(type);
a.perform();
或者你需要什么。
如果您正在寻找使用静态方法的课程,您可以进行反思,但是您做错了。您可能希望修改代码以使用对象而不是类。
答案 2 :(得分:0)
好的......
感谢您的帮助,我创建了一个Factory方法,该方法根据类型返回一个对象。
public class ActionFactory {
public static Action createAction(JSONObject object){
try{
String username = object.getString("USERNAME");
String type = object.getString("TYPE");
String src= object.getString("SRC");
String dest = object.getString("DEST");
if(type == "MOVE"){
return new ActionMove(username,src,dest);
}
else if(type == "KILL"){
return new ActionKill(username,src,dest);
}
else if(type == "DIED"){
return new ActionDied(username, src, dest);
}
else if(type == "TIE"){
// TODO: implement
}
}
catch(JSONException e){
e.printStackTrace();
}
return null;
}
}