• Авторизация


Синглетоны с вайфайем 06-08-2011 04:16 к комментариям - к полной версии - понравилось!


То что сейчас будет написано возможно противоречит каким-нибудь принципам "правильного" проектирования ПО, так что будьте осторожны ))

Предлагаемый подход родился в моей голове чтобы упростить доступ к объектам классов вида "синглетон". Кто не в курсе, знайте, что это классы с объектами в единственном экземпляре и временем жизни равным (или примерно равным) времени работы программы. Классический подход предлагает передавать их по цепочкам в виде параметров и хранить в объектах-клиентах посредством агрегации (в виде ссылок). Такой подход похож на прокладывание сетевых проводов, где устройства взаимодействуют лишь с соседями, прямо или косвенно соединёнными проводами. Прокладывать провода или же обеспечивать каждый раз передачу синглетона по иерархии геморно. Поэтому предлагается устроить нечто похожее на wifi-сети в проектируемой объектно-ориентированной системе. Сделать синглетоны доступными всем, посредством статической переменной (метода) - почему бы и нет?

Преимущества заключаются в том, что получить доступ к такому синглетону можно из любого другого класса без всяких параметров. Недостаток заключается в отсутствии контроля за состоянием синглетона, т.к. теперь кто угодно в любой момент времени может его изменить. Чтобы исправить этот недостаток, можно разрешить доступ к синглетону только тем классам, для кого он предназначен. Как же это сделать? В разных языках могут быть свои средства, но всегда можно явно прописать в синглетоне названия конкретных классов, а потом проверять их в методе получения синглетона. Можно также извратиться и сделать что-то вроде системы паролей в своей программе, если других языковых средств нет.

Выгода от этого подхода огромна! Нет гемору с параметрами и ссылками!
Подробности описал в этой статье.
вверх^ к полной версии понравилось! в evernote
Комментарии (5):
Ну я сейчас в тестовой системе чата использую класс Global, в котором лежат все глобальные данные вроде текущей локации, информации о юзере и т.д. Хотя контроля за изменением нет, ввести его можно (допустим чтоб информацию о юзере мог изменять только интерфейс настроек), хотя сейчас и не надо. Или я все-таки не так понял? Во всяком случае, я считаю что такой подход гораздо удобней.
eugene20237 06-08-2011-04:27 удалить
Ответ на комментарий Акира_Томео # Да, ты абсолютно прав. Действительно в большинстве случаев контроль за состоянием синглетона не нужен, особенно для класса констант. Он нужен для сложных классов, которые содержат динамические массивы других объектов и большое количество разных классов-клиентов.
eugene20237 06-08-2011-04:28 удалить
Ответ на комментарий Акира_Томео # А идея заключается в том, чтобы получать доступ по точно такой же схеме например к классу Main в AS3.
Т.е. к классу-координатору идет запрос типа "дай мне такие данные из Main.as", он сверяется с тем, что мол можно ли давать их, и выдает, если оные имеются? Или ты имеешь ввиду статиц инстансе, ведущий на текущий активный элемент? Кстати насчет класса констант ты ошибся. Класс констант - это класс констант, а класс Global - это класс Global. =) Я в него пихаю не статичные данные, а изменяющиеся во время работы программы или подгружаемые с сервера во время прелоадинга (была мысль сделать для загружаемых данных отдельный класс, но это уже перебор).
eugene20237 06-08-2011-13:45 удалить
Ответ на комментарий Акира_Томео #
PHP:

// Маленький класс на нижнем уровне иерархии
class SmallBlaBla:
{
  .........
  private function 
func(): void
  
{
    var 
main:Main Main.getInstance(this);
    if (
main != null)
    {
      
// Работа с данными main
      
............
    }

    var global:Global = Global.
getInstance(this);
    if (global != 
null)
    {
      
// Работа с данными global
      
...........
    }

    var 
dataProvider:DataProvider DataProvider.getInstance(this);
    if (
dataProvider != null)
    {
      
// Работа с данными dataProvider
      
...........
    }

    .......
  }
}
font>


Просто более быстрый доступ к единичным объектам, если делать их таким способом. Проверка на null здесь излишняя. Если доступ запрещён, этот синглетон выплюнет исключение.


Комментарии (5): вверх^

Вы сейчас не можете прокомментировать это сообщение.

Дневник Синглетоны с вайфайем | eugene20237 - Дневник eugene20237 | Лента друзей eugene20237 / Полная версия Добавить в друзья Страницы: раньше»