通过访问器方法封装java.util.Properties访问被认为是不好的做法?
作者:互联网
我正在使用java.util.Properties来处理我正在进行的项目.我有一个使用Properties实例管理.properties文件的类,名为PropertiesManager.此类管理从光盘加载和保存.properties文件.
现在,因为我想确保只能访问有效的属性,并且只要属性不在文件中,就会使用默认值,我为文件的每个属性添加了getter和setter.
问题是使类PropertiesManager非常大.单独的getter和setter(带注释/空行)是300行代码.因此,即使我将加载/保存转移到另一个类(继承等),它仍然是大的.
这不是实际的代码,但它给你的想法:
import java.util.Properties;
public class PropertiesManager {
private Properties properties;
public PropertiesManager() {
// constructor
}
private void save() {
// save in .properties file
}
private void load() {
// load from .properties file
}
public String getPropertyName1() {
return properties.getProperty("PropertyName1", "Property1DefaultValue");
}
// 28 more getters here
public String getPropertyName30() {
return properties.getProperty("PropertyName30", "Property30DefaultValue");
}
public void setPropertyName1(String value) {
properties.setProperty("PropertyName1", value);
}
// 28 more more setters here
public void setPropertyName30(String value) {
properties.setProperty("PropertyName30", value);
}
}
以这种方式封装对Properties实例的访问权限被认为是不好的做法吗?我应该直接使用Properties实例而不是使用访问器方法吗?还有其他解决方案吗?
解决方法:
我只是将它更改为使用枚举的单个getter / setter:
public class PropertiesManager {
...
public String getProperty(EnumProp enumProp) {
return properties.getProperty(enumProp.getKey(), enumProp.getDefaultValue());
}
public void setProperty(EnumProp enumProp, String value) {
properties.setProperty(enumProp.getKey(), value);
}
}
有了这个枚举:
public enum EnumProp {
PROP_1("key", "defaultValue"),
...
EnumProp(String key, String defaultValue){
this.key = key;
this.defaultValue = defaultValue;
}
}
标签:software-design,java,encapsulation 来源: https://codeday.me/bug/20190727/1552907.html