Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从控制器中的多个视图中选择一个视图(我不想要if/else,因为我可能有多个视图)_Java_Model View Controller_Controllers - Fatal编程技术网

Java 如何从控制器中的多个视图中选择一个视图(我不想要if/else,因为我可能有多个视图)

Java 如何从控制器中的多个视图中选择一个视图(我不想要if/else,因为我可能有多个视图),java,model-view-controller,controllers,Java,Model View Controller,Controllers,依此类推……使用地图,在地图上用给定的键注册视图: if ( accountType = "admin" ) return admin view if ( accountType = "customer" ) return customer view if ( accountType = "user" ) return user view if ( accountType = "merketing" ) return marketi

依此类推……

使用地图,在地图上用给定的键注册视图:

if ( accountType = "admin" )
        return admin view
if ( accountType = "customer" )
        return customer view
if ( accountType = "user" )
        return user view
if ( accountType = "merketing" )
        return marketing view
然后,只要做:

viewsMap.put("admin", admin_view);
viewsMap.put("customer", customer_view);
...

您可以将其放入HashMap,然后从那里获取;)

如果要分离创建代码,请使用简化工厂:

View view = viewsMap.get(accountType);
if (view == null) {
    return error_view;
}
return view;

您可以这样做,因为您的视图实现了一个公共接口

使用Switch语句:@BakedInhalf Switch在java之前不会对字符串类型进行操作7@Funtik当然可以!任何一行解决方案?@Funtik Yes开关在java 7之后在字符串上运行,但仍将在映射中进行处理我想要一行解决方案,并且想要打开-关闭原则上不认为它可以在一行中完成,类似于将accountType的值与变量名或类似的内容相匹配。使用一个映射是你能得到的最接近的:一行用来检索它(如果你不做任何错误检查),一行用来注册每个视图。我有点想把它放在数据库中,然后用基本url检索它。比如重定向到(baseURL+role+“.jsp”);也许你应该把问题中的伪代码弄清楚一点。你想退货什么?一个(复杂的?)视图对象,或者只是一个字符串,例如URL?你的问题真的不清楚,尤其是你没有说你是否使用了什么框架。如果它只是一个字符串,我想傻瓜有一个很好的解决方案,他可能会再次发布。仍然会在地图中处理我想要一条线的解决方案,想要开闭的原则
class ViewFactory {
   public static View createView(String viewName)
   {
        if( viewName = admin )
            return new AdminView();

   }
}