2

クラスを実装したいときに2つのタイプの使用の実際の違いが何であるかわかりません:(実行すると、同じ結果であることがわかります)

最初の例:Rendererクラスに直接実装します。

2番目の例:サブクラスを作成し、このクラスに実装させるRenderer

インターネット/電子ブックでドキュメントを読むときに私が通常会う2番目。たぶん、ソリューション2には、私にはわからないもっと多くの利点があります。

GLSurfaceView glView;

public class TriangleOpenGLTest implements Renderer{

    public void onCreate(Bundle savedInstanceState){

        glView = new GLSurfaceView(this);
        glView.setRenderer(this);   //this line

    }

}

と:

GLSurfaceView glView;

public class TriangleOpenGLTest implements Renderer{

    public void onCreate(Bundle savedInstanceState){

        glView = new GLSurfaceView(this);
        glView.setRenderer(new Render() );     //And this line

    }

    class Render() implements Renderer{
           //Override function here 

}

教えて下さい。

ありがとう :)

4

2 に答える 2

2

2つの方法は良いですが、私は2番目の方法を好みます。なんで ?

それはもっとはっきりしていると思います。このようにして、Rendererインターフェイスに関する特定のビジネスコードとTriangleOpenGLTestに関する他のビジネスコードを明確に分離します。

TriangleOpenGLTestに固有のものと、レンダリングの実装に固有のものを簡単に区別できます。

于 2012-02-17T14:56:50.477 に答える
2

高い凝集度を目指して努力する必要があります。クラスは(多かれ少なかれ)1つの仕事をする必要があります。

クラスがインターフェースを実装している場合、そのインターフェースはそのクラスのAPIの一部です(たとえば、クラスがインターフェースを実装していることがJavadocに表示されます)。したがって、たとえば、クラスは本当にレンダラーであり、レンダラーを使用できるすべての場所で使用することを目的としていますか?それとも、単なる実装の詳細ですか?

実装の詳細だけの場合は、APIのインターフェイスをリークするのではなく、別のクラス(ローカル内部クラスや匿名クラスなど)を使用することをお勧めします。

于 2012-02-17T15:05:57.157 に答える