知道Storage是一个接口而StorageXX是它的实现,我想知道是否可以替换以下代码......
@media print {
.tailoredLink{
color: gray;
}
}
...由动态构造函数"采用String参数(storageType)的Storage,返回我想要的实例...
如果存储应该是抽象类,那无关紧要。
如果可能,我宁愿避免使用任何switch语句。
答案 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();