Android и ресурсы -> лучшая реализация - PullRequest
0 голосов
/ 07 сентября 2011

Какова лучшая реализация:

Первый:

class Ball extends View {
    private Animation fallAnimation;

    public void fall() {
        fallAnimation = AnimationUtils.loadAnimation(getContext(), R.anim.fall);
        startAnimation(fallAnimation);
    }

}

Второй:

class Ball extends View {
    private Animation fallAnimation;

    public void fall() {
        fallAnimation = BallLoader.loadFall();
        startAnimation(fallAnimation);
    }

}

class BallLoader {
    private static Animation fallAnimation;

    public static Animation loadFall() {
        if (fallAnimation == null) {
            fallAnimation = AnimationUtils.loadAnimation(getContext(),
                R.anim.fall);
        }
        return fallAnimation;
    }

}

Расширение второго загрузчика:

class BallLoader {
    private static Animation fallAnimation;
    private static Animation moveAnimation;
    private static Animation jumpAnimation;

    public static Animation loadFall() {
        if (fallAnimation == null) {
            fallAnimation = AnimationUtils.loadAnimation(getContext(),
                R.anim.fall);
        }
        return fallAnimation;
    }

    //not optimized, just for example
    public static Animation loadMove() {
        if (moveAnimation == null) {
           moveAnimation = AnimationUtils.loadAnimation(getContext(),
                R.anim.move);
        }
        return moveAnimation;
    }

    //not optimized, just for example
    public static Animation loadJump() {
        if (jumpAnimation == null) {
           jumpAnimation = AnimationUtils.loadAnimation(getContext(),
                R.anim.jump);
        }
        return jumpAnimation;
    }

}

Использование этого:

Ball ball1 = new Ball();
Ball ball2 = new Ball();
Ball ball3 = new Ball();
Ball ball4 = new Ball();
Ball ball5 = new Ball();
Ball ball6 = new Ball();
Ball ball7 = new Ball();
Ball ball8 = new Ball();
Ball ball9 = new Ball();

ball1.fall();
ball2.fall();
ball3.fall();
ball4.fall();
ball5.fall();
ball6.fall();
ball7.fall();
ball8.fall();
ball9.fall();

Я думаю, что первое более ясно и не так запутано.Но будут ли проблемы с производительностью?Android загружает эту анимацию каждый раз, или, может быть, она кешируется платформой Android? ...

Второй более запутанный, и оригинальный класс очень большой, и, возможно, другие программисты будут с этим путаться ... Я не знаю,скажите пожалуйста, какая реализация лучше?

1 Ответ

2 голосов
/ 07 сентября 2011

Две реализации делают разные вещи.Во-первых, каждый объект Ball использует отдельный объект Animation.Во втором (который является Singleton pattern ) один и тот же объект Animation используется всеми объектами Ball.Что лучше, зависит от ваших требований.

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