![]() |
Стиль реализации статического класса
Вариант 1:
Есть статик класс: Код AS3:
Как видно getLocal() вызывается в каждой статической функции. Что, наверное тратит лишние производительные ресурсы. Вариант 2: можно сделать статическую переменную static var sharedObject:SharedObject; и один раз получить куки, а далее использовать ее во всех статик функциях. Код AS3:
Вариант 3: при объявлении статической переменной, сразу же ее инициализировать Код AS3:
Какой вариант правильнее всего выбрать? |
Цитата:
|
может проще синглтон использовать?
|
Синглтон?
Я бы сделал еще статический метод init(), в который передавал SharedObject.getLocal(Constant.SHARED_OBJECT_NAME). |
Терпеть не могу статику. Мне кажется лучший вариант от maxkar.
Статику можно использовать исключительно в качестве хэлперов. |
Код AS3:
Код AS3:
|
maxkar
>>правильнее всего сделать методы в Profile не статическими, создавать один его экземпляр при старте >>приложения Согласен, к этому и стараюсь идти, чтобы не плодить глобал переменные, но порой очень не удобно передавать экземпляр внутрь иерархической структуры классов. КорДум Я бы сделал еще статический метод init(), в который передавал SharedObject.getLocal(Constant.SHARED_OBJECT_NAME). Не очень хорошо, когда в статик классе нельзя пользоваться другими статик функциями, пока не вызвать статик ф-ю init. В этом и изначальная загвоздка была. dsQuadro Замечательное решение к данной задаче: - глобал доступ - создание экземпляра идет не при запуске программы, а в том месте, где в первый раз воспользовались функцией, это супер! - минимум статик функций - появилась возможность только один раз вызвать ф-ю getLocal в конструкторе и передать SharedObject приватной переменной, которая далее используется в функциях класса. - решилась проблема с первоочередностью вызова init - такую функцию вообще вырезаем. Ага спасибо за пример , реализация заготовки синглтона у меня была: Код AS3:
|
Цитата:
Исключением является "крупномодульное" взаимодействие (плагины и т.п., получающие набор классов среды выполнения). Но там подобная передача ограничивается тем же одним уровнем, код внутри плагина точно так же собирается "от меньшего к большему". Так что "далеких" передач объектов нигде нет, есть только последовательность создания модуля/приложения. При использовании inversion-of-control контейнера там не линейная, а древовидная схема получается, но это не принципиально. |
Цитата:
У flashdynamix есть в утилитах SWFProfiler со статическим методом init(), который принимает ссылку на stage. Ну и я делал как-то похожее. Синглтон, в общем, нужен. |
maxkar
>>что где-то не до конца вынесены зависимости Для снижения связей и зависимостей между классами в древовидной иерархии, я стараюсь максимально применить композицию построенную на ее принципе и интерфейсах. Тем не менее, никогда не задумывался и не придерживался правилу "Вся программа при инициализации собирается "снизу вверх"". Как только узнаешь это правило, тут же всплывают все приемущества такого подхода, при том что я очень люблю композицию. Спасибо за совет, буду больше думать об этом! Действительно, если упрощенно говорить, то передача класса по дочерним классам, может быть выстроена почти на одном уровне вложенности. Кстати, посоветуйте какие книжки можно почитать по архетиктуре ПО? Т.е. к примеру по паттернам проектирования материал читаю, также стараюсь использовать правила SOLID и пр. |
| Часовой пояс GMT +4, время: 08:24. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.