1

如果我有 3 个类,让我们为参数起见称它们为:

  • 主要活动
  • GLR渲染器
  • 其他类

请注意,GLRenderer不是纯粹的代理类,而是包含一些代理方法。

MainActivity初始化一个名为value的int 。现在,如果OtherClass出于某种原因需要更改该值,并且它只能直接访问GLRenderer类(而后者又可以访问MainActivity类,那么访问该变量的最佳方法是什么?

目前,我在MainActivity中使用了一个 setter 方法,然后在GLRenderer中使用了另一个 setter方法(实际上是一个代理方法,因为它只是传递值)。

这很好用,也是我目前的工作方式。这是一些伪代码(我意识到这段代码可能无法编译,纯粹是为了这个问题的目的):

主要活动

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代码中的注释)

GLR渲染器

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/setter(如果我有很多需要的东西,这可能会很痛苦使用权)。

4

1 回答 1

3

“上面的比做这样的事情更好吗?”

是的,因为第二种方法违反了封装,它允许 OtherClass 知道 GLRenderer 是 MainActivity 的代理。GLRenderer 如何设置其 int 值与 OtherClass 无关。

从维护的角度来看,第一种方法也更好,因为它允许 MainActivity(以及 GLRenderer 对 MainActivity 的使用)独立于 OtherClass 进行更改。在第二种方法中,更改 int 值的设置方式也需要更改 OtherClass。

于 2014-07-09T00:51:05.190 回答