Избегайте внутренних добытчиков / сеттеров - Game

1

Я работаю над игрой. View, Thread и Engine выполнены. Теперь я расскажу, как, например, установить координаты в мой битмап.

Я успешно сделал это с помощью метода get/seters. Я читал по сети там, большинство из лучших разработчиков игр говорят, что "сделайте свою переменную участника общедоступной" и все такое.

Так как я прочитал раздел "Избегайте внутренних геттеров/сеттеров" в http://developer.android.com/guide/practices/design/performance.html, я начал задаваться вопросом: как я могу изменить свои координаты- класс для достижения этого без "сеттеров", например?

Теперь мой класс Coordinates выглядит следующим образом:

package com.mygame.mygame;

public class Coordinates {
    int x;
    int y;
    Coordinates instance = null;

 public Coordinates getInstance(){
  if(instance == null){
   instance = new Coordinates();  
  }
  return instance;
 }

    public Coordinates() {    
    }

    public int getX() {
        return x;
    }

    public void setX(int value) { 
        x = value;
    }

    public int getY() {
        return y;
    }
    public void setY(int value) {
        y = value;
    } 

}

Как мне изменить свой код, чтобы достичь этого? Вызов метода дорог, но я до сих пор не знаю, как реструктурировать текущий код без геттеров и сеттеров.

ОБНОВЛЕНО

 public GameEngine getInstance(){
 if(instance == null){
  instance = new GameEngine(resources,view);  
  }
  return instance;
  }

ОБНОВЛЕНИЕ 2

GameEngine

    static Resources res;

static GameView view;

static GameEngine instance = null;

public static GameEngine getInstance(Resources localResources, GameView localView){
    view = localView;
    res = localResources;
    if(instance == null){
        instance = new GameEngine(); //Init-stuff in the GameEngine
    }
    return instance;
}

и мой GameView

static GameEngine engine;
public GameView(Context localContext) {
   //Other stuff
   engine = GameEngine.getInstance(context.getResources(), this);
   //Other stuff
}

Спасибо заранее!

Теги:

2 ответа

3
Лучший ответ

Вы, кажется, неправильно понимаете слово "внутреннее". Этот документ больше говорит вам, что вы не должны делать, например:

public Coordinates(int x, int y) {
    setX(x);
    setY(y);
}

но тем более

public Coordinates(int x, int y) {
    this.x = x;
    this.y = y;
}

Другими словами, избегайте использования getters/seters в классе same, где они определены.

Ваш текущий класс не делает этого где-то между прочим. Только метод getInstance() просто бесполезен в этом контексте. Я бы избавился от него.

  • 0
    Вау! Это имеет смысл! Но, это способ сделать это? Разве вызовы методов не слишком дороги в этих ракурсах? Ну, у меня есть вызовы методов в моем движке.
  • 0
    Да, это нормальная практика. Что касается дороговизны, то вызовы методов получения / установки особенно дешевы, это больше вопрос стиля. Но в машине с несколькими ресурсами и практически без JIT-оптимизаций, таких как мобильные телефоны, я думаю, что любая оптимизация приветствуется.
Показать ещё 10 комментариев
1

public - это значение по умолчанию для членов, если не указано иное. Просто не используйте геттер или сеттер для x и y.

  • 0
    Видимость по умолчанию не является общедоступной. Как и в текущем коде, элементы видны только для классов в одном и том же пакете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню