Доступ к объектам во время выполнения! - PullRequest
0 голосов
/ 12 декабря 2010

У меня есть Java-программа, которая позволяет создавать новые рисунки при нажатии кнопки, скажем, каждая кнопка представляет собой круг с номером в ней.

То, что я хочу сделать, это когдаЯ создаю 3 круга, число внутри кругов, которые я создаю, составляет 1-3, но для этого мне нужно иметь возможность отслеживать количество объектов круга, которые уже создан пользователем.

Я думал об использовании InstanceOf, ноэто кажется грубым способом его реализации

Любые идеи оценены.Спасибо Крис

Ответы [ 6 ]

2 голосов
/ 12 декабря 2010

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

Попробуйте представить его как приложение MVC, где ваши компоненты - это слой представления, модель - это bean-компонент, хранящий количество экземпляров (или ссылки на них).) и контроллером будет код, запускаемый «событиями» из слоев представления и модели.

Как уже упоминалось в ответах выше, вам потребуется центральная точка для доступа к вашим данным, поэтому вам нужно будет убедиться, что существует только одно представление bean-компонента состояния пользовательского интерфейса.Это может быть достигнуто либо с помощью одноэлементного шаблона, как вы предложили, либо с помощью статических полей, либо с помощью фасада поставщика услуг для доступа к объекту, любой из них сделает эту работу.Конечно, вам нужно выбрать метод, который лучше всего подходит для вашего проекта, чрезмерное проектирование тоже плохо;)

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

1 голос
/ 12 декабря 2010

Я не знаю, как вы спроектировали свою систему. Но то, что у меня было бы, - это центральное место, где все мои фигуры хранятся и могут быть добавлены / удалены. Это хранилище может также отвечать за подсчет, какие объекты он создал / удалил и как они называются.

Я думаю, что статическая переменная - это простое решение, если вы не планируете расширять программу или не предъявляете больших требований.

1 голос
/ 12 декабря 2010

Другой способ сделать это - сохранить ваши объекты Circle в ArrayList, чтобы вы могли проверить, сколько их кругов, с помощью метода .size ().Еще одним преимуществом является то, что вы можете легко изменять / удалять определенные круги.

РЕДАКТИРОВАТЬ : добавлен бонус, числа, которые вы хотите представить в кругах, являются индексами круга + 1.

0 голосов
/ 12 декабря 2010

Просто используйте статический AtomicInteger, который будет отслеживать количество ваших экземпляров для созданных кругов.Если вы чувствуете себя достаточно предприимчивым, вы также можете отслеживать отдельные экземпляры на основе их идентификатора, используя статический кэш с мягкими ссылками .

0 голосов
/ 12 декабря 2010

Если количество кругов может только увеличиться (круги не могут быть удалены), тогда вы хотите использовать статическую переменную в классе Circle, чтобы отслеживать количество раз, когда класс инстанцирован.

т.е:.

public class Circle
{
    private static int numCircles = 0;
    private int circleId;

    public Circle()
    {
        // Preincrement the number of circles and assign this circle its ID.
        circleId = ++numCircles;
    }
}

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

т.е:.

public class Circle
{
    private int circleId;

    public Circle(int id)
    {
        circleId = id;
    }
}

public class Circles
{
    private static ArrayList<Circle> circleList = new ArrayList<Circle>();

    public static Circle getNewCircle()
    {
        Circle newCircle = new Circle(circleList.size() + 1);
        circleList.add(newCircle);
        return newCircle;
    }
}
0 голосов
/ 12 декабря 2010

При условии, что я правильно понимаю ваш вопрос, все, что вам нужно, - это глобальная (например, статическая) переменная, которая увеличивается каждый раз при создании объекта Circle, например, от конструктора.

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