Одним из способов реализации этого является HashMap , который отображает поле в формат сообщения. Если у вас есть разные форматы для получения поля и установки поля, вам понадобятся два HashMaps .
Ваше приложение должно будет вызывать методы для каждого поля, поэтому вы можете добавить два метода: setField (string fieldName, string fieldValue) и getField (string fieldName) .
Вы можете добавить статический класс, который будет содержать поля.
public class Fields {
public final string Alpha = "Alpha";
public final string Alpha = "Beta";
// ......
}
Добавить фабрику для разделения ответственности за создание сообщения на специальный объект:
public class MessageFactory {
private HashMap<string, string> mFieldNameMessageFormatMap;
public MessageFactory() {
mFieldNameMessageFormatMap = HashMap<string, string>();
// Initialize your formats here. These are just for example and are not
correct
mFieldNameMessageFormatMap.put(Fields.Alpha, "<ESC>ABC*%sDEF<LF>");
mFieldNameMessageFormatMap.put(Fields.Beta, "<ESC>OPQ*%sRST<LF>");
}
public string createGetFielMessage(string fieldName) {
return String.format(mFieldNameMessageFormatMap.get(fieldName), "");
}
public void createSetFieldMessage(string fieldName, string value) {
return String.format(mFieldNameMessageFormatMap.get(fieldName), value);
}
}
Тогда ваш код становится:
public void getValue(string fieldName) {
return sendMessage(mMessageFactory.createGetFieldValue(fieldName));
}
public void setValue(string fieldName, string value) {
return sendMessage(mMessageFactory.createSetFieldValue(fieldName), value);
}
// usage:
string fieldValue = getValue(Fields.Alpha);
setValue(Fields.Alpha);
Добавление новых полей легко. Вам просто нужно добавить поле в класс Fields и добавить форматирование в Factory
Таким образом, вам не нужно писать метод для каждого поля, и ваш код не будет содержать 'magic strings' .