1

3 つのクラスがある場合は、引数のためにそれらを呼び出しましょう。

  • 主な活動
  • GLRenderer
  • その他のクラス

GLRendererは純粋なプロキシ クラスではなく、いくつかのプロキシ メソッドが含まれていることに注意してください。

MainActivityは、valueと呼ばれる int を初期化します。さて、なんらかの理由でOtherClassがその値を変更する必要があり、GLRenderer クラスに直接アクセスするしかない場合(これはMainActivityクラスにアクセスできます)、この変数にアクセスする最善の方法は何でしょうか?

現在、私は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から何かにアクセスできます(必要なものがたくさんある場合、これは苦痛になる可能性があります)。アクセス)。

4

1 に答える 1

3

「このようなことをするよりも、上記のほうがいいですか?」

はい、そうです。2 番目のアプローチは、GLRenderer が MainActivity のプロキシであることを OtherClass に認識させることにより、カプセル化に違反するためです。GLRenderer がその int 値を設定する方法は、OtherClass の仕事ではありません。

最初のアプローチは、MainActivity (および GLRenderer による MainActivity の使用) を OtherClass とは無関係に変更できるため、メンテナンスの観点からも優れています。2 番目の方法では、int 値の設定方法を変更すると、OtherClass も変更する必要があります。

于 2014-07-09T00:51:05.190 に答える