пятница, ноября 23, 2007

Паттерн Singleton в языке ActionScript

Наконец решил использовать Singleton явно и в полную силу.
С удивлением обнаружил что раньше не вставил ссылку на эту статью в свой блог и теперь потратил время чтобы перерыть flash-ripper в поисках ссылки...
Итак, как резюме - здесь пример паттерна на AS3, хотя никто нам не мешает модифицировать и использовать этот код для AS2 (правда уже не получится реализовать такой же запрет на инстанцирование через конструктор).

* * *

Запрет на инстанцирование на AS2 делается еще проще чем на AS3, так как есть возможность объявить конструктор класса как private.

5 комментариев:

Constantiner комментирует...

Это. Singletone является примером антипаттерна. И к нему применимо простое правило: десять раз подумай прежде чем его использовать.

В AS2, кстати, все как раз проще. Просто делаешь приватный конструктор :))

Racer комментирует...

Хм... А слона то я и не приметил :). Спасибо!

Кстати, насчет антипаттерна - История такова (в абстракциях):
Есть пара-тройка объектов, которые по принципу программы одни в своем роде. Их обычно создает и хранит какой-то главный объект типа Main, Root и т.п.
В процессе проектирования выясняется что несколько объектов должны знать о них. Передаем им ссылочки.
Далее, в процессе разработки всплыли и другие желающие. Им ссылочки дать стало сложнее. В итоге - выясняется, что все эти "передай другому" ужастно портят картину.
Хотя, если с другой стороны посмотреть - вроде и правильно - есть контроль доступа - кому дал тот и может иметь доступ к ним.

Другой способ - включить объекты в цепочку рассылки и запрашивать/получать данные через некоторую систему сообщений. Недостаток - на мой взгляд упадет производительность. Формировать запросы, рассылать и т.п.

Сделав эти пару-тройку объектов одиночками с глобальным доступом мы откроем доступ к ним любому объекту.
Самому не очень нравится, но если не злоупотреблять, это может стать хорошей практикой. Ведь пользуемся же мы Math, Keyboard, Mouse и т.п.

Анонимный комментирует...

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

сейчас начинаю проект, игрушка типа lines,tetris,block breaker,arcanoid

програмирую в AS3
впервые задумался о том что можно не ломать голову над тем как спланировать прогу от начала до конца в уме или на бумаге,- а взять готовый набор паттернов и всё будет хорошо )))

какими патернами лучше воспользоваться в решении данной задачи что-б потом разгребать меньше проблем ???
думаю использовать MVC, render засуну во view, а обьекты такие как plane,cube,etc... определю в Model которые будут рэндирится уже во view, есть ещё такие веши как счётчик очков, лэвэлов и может быть логин с аутенфикацией - которые я сделаю синглтонами а там будет видно куда их подклюьчать

в правильнои-ли направлении работает моя мысль

не поленитесь ответить - это сэкономит мне много времени и сил
заранее огромное спасибо

Racer комментирует...

Нормал, единственное - я б не советовал плодить синглтоны. Например, авторизацию в синглтон оформлять нет смысла - сделать ее отдельным не связанным с другими модулем. Синглтон использовать только для глобального доступа к каким-то совсем общим данным и сервисным функциям, которые повсюду нужны и не сильно влияют на общую логику приложения. Иначе количество взаимосвязей между модулями сильно увеличится и потом черт ногу сломит.

Анонимный комментирует...

спасибо за совет.