общий доступ к объекту приложения - PullRequest
1 голос
/ 25 марта 2012

Распространено использование объекта во всем приложении.Каковы различные шаблоны / модели / способы совместного использования объекта через приложение?

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

Ответы [ 4 ]

4 голосов
/ 25 марта 2012

Распространено, когда объект используется в приложении.Каковы различные шаблоны / модели / способы совместного использования объекта через приложение?

Одним из распространенных способов является использование одноэлементного шаблона.Хотя я бы этого избегал.

Определяет "основной класс", затем устанавливает переменную-член и расширяет все остальные классы из этого "основного класса".

Точно нет.Помимо всего прочего, если это переменная instance , она все равно не будет "совместно использоваться" с экземплярами ваших других классов.Это также полное злоупотребление наследованием, которое, несомненно, сильно укусит вас в любом приложении значительного размера - ваши другие классы не будут логически иметь отношения наследования с вашим «основным» классом, не так ли?Как правило, наследование следует использовать только тогда, когда оно действительно уместно, а не для быстрого исправления.

Какой ваш предпочтительный шаблон?

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

Внедрение зависимостей обычно работает лучше, чем использование синглетонов, потому что:

  • Сам классне знает, является ли зависимость на самом деле общей;почему это должно волновать?
  • Глобальное состояние усложняет модульное тестирование
  • Каждый класс делает свои зависимости более ясными, когда они объявлены - тогда легче перемещаться по приложению и видеть, как классы связаны сдруг друга.

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

1 голос
/ 25 марта 2012

Если вы используете фреймворк, такой как Spring, с внедрением зависимостей, вы можете получить все преимущества «глобальных» объектов бесплатно без необходимости их явного определения. Вы просто создаете ссылку на них в контексте своего приложения и можете вставить их в любой объект, который вам нужен, не беспокоясь о проблемах с синхронизацией.

0 голосов
/ 25 марта 2012

Я верю, что вы ищете шаблон Singleton.С этим шаблоном вы можете быть уверены, что в памяти может быть создан только один экземпляр класса.

Пример:

public class mySingletonClass {

    private static mySingletonClass singleObject;

    // Note that the constructor is private to prevent more than one 
    //instance of the class
    private SingletonObjectDemo() {
        // Optional Code
    }

    public static mySingletonClass getSingletonObject() {
        if (singleObject == null) {
            singleObject = new mySingletonClass();
        }
        return singleObject;
    }
}

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

0 голосов
/ 25 марта 2012

шаблон Singleton , AFAIK предпочтительный способ разработки программного обеспечения.

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