知道存储是一个接口,StorageXX是它的实现,我想知道是否可以替换以下代码...
Storage storage;
switch (storageType) {
case "list":
storage = new StorageList();
break;
case "map":
storage = new StorageMap();
break;
case "db":
storage = new StorageDB();
break;
default:
throw new UnsupportedStorageTypeException();
}
。通过采用字符串参数(存储类型(的存储的"动态构造函数",在每种情况下返回我想要的实例......
存储是否应该是一个抽象类并不重要。
如果可能的话,我宁愿避免任何开关语句。
工厂模式是你应该研究的东西。它完全符合您的要求。
您可以使用工厂模式来实现这一点。
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");
你可以创建一个从存储类型到类的映射
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();