根据类型标识创建类

时间:2014-06-10 14:35:53

标签: java design-patterns

是否有根据类型创建类的设计模式或任何其他方式?

我的服务器收到一条json消息,其中包含要执行的操作。

我有几个Action类,应该映射到相应的类。

{ TYPE: 'MOVE' ... } => class ActionMove
{ TYPE: 'KILL' ... } => class ActionKill

(所有Action类都实现了Action接口)。

如何根据类型创建类?

3 个答案:

答案 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;

}

}