Два способа реализации класса - PullRequest
2 голосов
/ 17 февраля 2012

Я не знаю, какова реальная разница между двумя типами использования, когда я хочу реализовать класс: (я запускаю и вижу, что это один и тот же результат)

первый пример: реализовать Renderer непосредственно дляclass.

второй пример: создайте подкласс и сделайте этот класс реализующим Renderer

Второй, который я обычно встречаю, когда читаю документ в интернете / электронную книгу.Возможно, у решения 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 

}

Пожалуйста, научите меня.

спасибо:)

Ответы [ 2 ]

2 голосов
/ 17 февраля 2012

Вы должны стремиться к высокой сплоченности - класс должен выполнять одну работу (более или менее).

Если класс реализует интерфейс, тогда этот интерфейс является частью API этого класса (например, он отображается вего Javadoc, что класс реализует интерфейс).Таким образом, вы должны спросить себя, например, действительно ли класс является рендерером и предназначен для использования везде, где можно использовать рендерер?Или это просто деталь реализации?

Если это просто деталь реализации, то лучше использовать другой класс (например, локальный внутренний или даже анонимный класс) вместо утечки интерфейса в API.

2 голосов
/ 17 февраля 2012

Два способа хороши, но я предпочитаю второй.Почему?

Мне кажется, это понятнее.Таким образом, вы четко разделяете конкретный бизнес-код об интерфейсе Renderer и другой бизнес-код о вашем TriangleOpenGLTest.

Легко определить, что конкретно относится к TriangleOpenGLTest и что конкретно относится к реализации рендеринга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...