Альтернатива для нескольких «прокси» методов в Java

1

Если у меня есть 3 класса, пусть для аргументов ради их можно назвать:

  • Основная деятельность
  • GLRenderer
  • OtherClass

Обратите внимание: GLRenderer не является чисто прокси-классом, но содержит некоторые прокси-методы.

MainActivity инициализирует int-значение. Теперь, если необходимо, чтобы AnyClass изменил это значение по какой-либо причине, и имеет только прямой доступ к классу GLRenderer (который, в свою очередь, имеет доступ к классу MainActivity, каков наилучший способ получить доступ к этой переменной?

В настоящее время я использую метод setter в MainActivity, а затем используя другой сеттер в GLRenderer (действительно, прокси-метод, поскольку он просто передает значение через).

Это прекрасно работает и как я сейчас делаю. Вот какой-то псевдокод (я понимаю, что этот код не может компилироваться, это чисто для цели этого вопроса):

Основная деятельность

public class MainActivity extends Activity {

    private int value;

        public setValue(int valueToSet){

           value = valueToSet;

        }

}

Второй класс

public class GLRenderer {

    private MainActivity activity;

        public GLRenderer(MainActivity activity){

            this.activity = activity;

        }


        public setValue(int value){

            activity.setValue(value);

        }

}

Другой класс

public class OtherClass {

    private GLRenderer glRenderer;

        public OtherClass(){

            this.glRenderer = glRenderer;

        }

        public someMethod(){

            glRenderer.setValue(5);        

        }


}

Является выше, чем делать что-то вроде этого: (Пожалуйста, см. Комментарии в коде OtherClass)

GLRenderer

public class GLRenderer {

    private MainActivity activity;

        public GLRenderer(MainActivity activity){

            this.activity = activity;

        }

    public MainActivity getActivity(){

        return activity;    

    }

}

Другой класс

public class OtherClass {

    private GLRenderer glRenderer;

        public OtherClass(){

            this.glRenderer = glRenderer;

        }

        public someMethod(){

            //I know this is considered bad.....
            glrenderer.activity.setValue(5);

            //But how about this - is this any different/better and if so, why?
            glRenderer.getActivity().setValue(5);



        }


}

Я знаю, что первый метод требует более короткой заключительной инструкции в OtherClass, но с использованием вышеописанного метода я мог бы получить доступ к чему-либо из MainActivity, не имея необходимости эффективно дублировать мои getter/seters (что может быть больно, если у меня есть много вещей, которые мне нужно доступ).

Теги:
getter-setter
readability
proxy-classes
law-of-demeter

1 ответ

3
Лучший ответ

"Является ли выше, чем делать что-то подобное?"

Да, это потому, что второй подход нарушает инкапсуляцию, позволяя OtherClass знать, что GLRenderer является прокси для MainActivity. Это ни один из бизнеса OtherClass, как GLRenderer не собирается устанавливать значение int.

Первый подход также лучше с точки зрения обслуживания, поскольку он позволяет MainActivity (и GLRenderer использование MainActivity) изменять независимо от OtherClass. Во втором подходе изменение способа установки значения int потребует изменения и для OtherClass.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню