用动态构造函数替换开关

时间:2017-06-20 19:07:14

标签: java

知道Storage是一个接口而StorageXX是它的实现,我想知道是否可以替换以下代码......

@media print {
   .tailoredLink{
      color: gray;
   }
}

...由动态构造函数"采用String参数(storageType)的Storage,返回我想要的实例...

如果存储应该是抽象类,那无关紧要。

如果可能,我宁愿避免使用任何switch语句。

3 个答案:

答案 0 :(得分:2)

Factory Pattern是你应该研究的东西。它完全符合您的要求。

答案 1 :(得分:1)

您可以使用工厂模式。

class StorageFactory
{
  public static Storage getStorage(String type)
  {
    if ( type.equals("list") )
      return new StorageList();
    else if ( type.equals("map") )
      return new StorageMap();
    else if ( type.equals("db") )
      return new StorageDb();

    throw new IllegalArgumentException();
  }
}

创建存储列表:

Storage storage = StorageFactory.getStorage("list");

答案 2 :(得分:0)

您可以创建从storageType到类

的地图
Map<String, Class<? extends Storage>> map = new HashMap<>();
map.put("list", StorageList.class);
map.put("map", StorageMap.class);
map.put("db", StorageDB.class);

然后通过Class使用实例化:

Class<? extends Storage> clazz = map.get(storageType);
if (clazz == null) {
    throw new UnsupportedStorageTypeException();
}
Storage storage = clazz.newInstance();