Я добавляю строку spacer к различным экранам графического интерфейса в зависимости от разрешения экрана. В настоящее время в различных классах GUI есть призывы к методу, который возвращает разрешение экрана и добавляет новый разделитель в зависимости от разрешения экрана. В зависимости от типа класса значение SpacerField может измениться. Есть ли шаблон проектирования, который я могу использовать для рефакторинга кода, так что есть меньше условных выражений и он ориентирован скорее на объект?Могу ли я использовать шаблон дизайна для решения этой проблемы?
Class A:
if(getScreenResolution() == 360){
add(new SpacerField(15));
}
if(getScreenResolution() == 460){
add(new SpacerField(5));
}
Class B:
if(getScreenResolution() == 360){
add(new SpacerField(35));
}
if(getScreenResolution() == 460){
add(new SpacerField(15));
}
Возможное решение -
add(new SpacerUtils.getSpacerField(this));
public static SpacerUtils {
static {
int screenRes = getScreenRes();
}
public static SpacerField getSpacerField(Object obj) {
if(obj instanceof GuiScreen1 && screenRes == 360){
return new SpacerField(25);
}
else if(obj instanceof GuiScreen2 && screenRes == 360){
return new SpacerField(35);
}
}
}
Что-то вроде этого? Для каждого возможного значения проставки мне нужно добавить новую реализацию, в этом случае у меня есть только один - SpacerSmall.
Caller -
Spacer spacer = new SpacerSmall();
if(resolution == 360){
add(new SpacerField(0 , spacer.getSpacerValue()));
}
Interface -
public interface Spacer {
public int getSpacerValue();
}
Implementation -
public class SpacerSmall implements Spacer{
public int getSpacerValue() {
return 15;
}
}
Вы можете использовать что-нибудь, чтобы решить эту проблему. Вы не должны слепо полагаться на дизайн pattens, чтобы сделать все хорошо для вас. Подумайте сами. – Vlad
Позвольте [менеджеру макетов] (http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html) выполнить эту работу. – trashgod
@ Vlad Хорошо, я добавил возможное решение, что вы думаете? Он содержит много условностей, которые являются плохим шаблоном проектирования? –