![]() |
реализация паттерна singleton на AS3
собств. вопрос... )
на AS2 использую давно... код примерно такой: Код:
class Main{ |
Можно выкидывать ошибку, если instance уже есть.
А вот необходимость использования подобного шаблона сомнительна. |
|
|
2__etc, хм, а ведь и правда! )
|
Цитата:
|
Цитата:
|
Да нет холивара. Я согласен с твоей формулировкой.
|
Код:
private static var __instance : SomeClass = null; |
и что это такое по вашему Mr. Fixit?
это тот же синглтон, только корявый... что будет если мы где-то напишем: Код:
var someClassInst:SomeClass = new SomeClass(); |
Цитата:
|
Цитата:
Цитата:
По сабжу.. кидать ошибку как и сказано постами выше. |
ну рас всё было сказано, зачем в чужой огород со своими граблями?
|
Цитата:
"Защита от дурака" должна быть не только в GUI (против пользователя, который жмёт все красные кнопки), но и в коде (против кодера, которому тоже свойственно ошибаться). |
Цитата:
|
абсолютно согласен с WindWalker, от себя добавлю... придерживаться инкапсуляции даже для себя ИМХО правильно... ) так как сейчас даже в своем фреймворке лень лезть и смотреть синглтон это или еще чего... )
|
Вот с защитой от дурака...
Код:
|
Код:
package com.dimpiax.laboratory.view { |
Цитата:
|
Я не очень поддерживаю карательные меры, но, если говорить о коде синглтонов опубликованых здесь, то __etc прав. Код ужасный.
Могу показать конкретные косяки. А по линку на сайт Юры Ярового не только код, но и хорошее описание. |
Цитата:
Код:
package { |
Цитата:
|
Цитата:
var boo:ClassA = new ClassA(true); trace("is it singleton? -"+foo == boo); Во многих случаях можно спорить о том что нравится/не нравится. Это называется холивар. Холивар обычно заканчивается, если кто-то способен доказать свою точку зрения примером. Например, как тот, что я написал. |
да я согласен что при тру.. кривость есть.. но зачем писать в данном контексте тру разработчику.. ну вообще то можно конечно ссылатся на того кто вызывает.. если не сам класс.. то ошибка.
Ясн... Iv спасибо. |
Холивар - это обычно что-то vs что-то. А Синглтон - он против кого?
В смысле, кто у него прямые конкуренты? Вот если хочется чего-то глобааального такого, то выбор не велик: или синглтон, или статические методы или методы пекеджа (что по сути те же статические методы). Статические методы имеют свои минусы. Совсем отказаться от глобального доступа - тоже не всегда хорошо. |
Холивар - это когда писками меряются. например я это уже 1й зачаток холивара в данном топе. может хоть один разовьём? а скучно.
|
Почитав книжку Foe, Object-Oriented Actionscript 3.0 (2007) долгое время использовал их версию синглтона
Код:
package {В каких конкретных случаях из практики использование этого паттерна необходимо? И какие причины против его использования? |
"необходимость" в программировании возникает вообще крайне редко... одну и ту же задачу можно решить множеством способов. Другое дело удобство, расширяемость, сопровождение, инкапсуляция, повторное использование кода и т.д. и т.п.... :)
|
Ну взять, скажем, опции: громкость музыки и эффектов, режим оконный/полноэкранный, качество высокое/низкое, режим паузы, режим mute и так далее.
Частенько нужны из самых разных и отдалённых концов приложения. Самый простой способ - сделать нечто с глобальным доступом. Одиночка тут вполне годиться. |
terbooter, вообще, синглтон сейчас многие относят к антипаттернам. И, наверное, это правильно.
Я думаю, что правильно его относить к антипаттернам, но не правильно совершенно от него отказываться. Так сложилось исторически. Это как использование _root в AS1-2. Синглетон объявили паттерном (т.е. рекомендуемым к применению шаблоном), но его используют в целях, для которых он совершенно не предусмотрен. Реальное назначение синглетона - предоставлять доступ к единственному экземпляру класса и не допускать возможность создания второго. Как правило, ошибочное использование синглетона - организация глобального доступа к объекту. Так вот, синглетон используют для организации глобального доступа раз в 100 чаще, чем в целях, которым он должен служить. Объявляя синглетон антипаттерном можно добиться того, что люди будут куда внимательнее относиться к его использованию. |
Цитата:
Можно не переносить его в раздел антипаттернов, а переименовать в Глобалтон. |
Пока я писал, небыло сообщения от WindWalker.
С сожалением констатирую, что им предложена ошибочная интерпретация синглетона. |
Цитата:
|
Ну ладно, бог с ним, с синглотоном.
Вот если есть нечто глобальное, что влияет на всё приложение в целом, то каким образом это лучше всего реализовать? Пример с опциями уже приводил. Другой пример - имя игрового аккаунта (в мультиплеерной) или игрового профиля (в сингплеерной) игре. Показывать и использовать надо в разных местах. А хранить надо в одном. Каким образом это лучше всего реализовать? |
Iv, я конечно понимаю, что строить всё приложение на синглтонах - бред, но вот создавать "большие" классы (основная сцена, конфиг, и др.) удобнее все же с применением синглтона, ну или фабрик... ;) холивар!!!
|
Я вообще не склонен к категорическим запретам.
Антипаттерн - не запрет, а повод быть очень внимательным и критичным. Делай как тебе нравится, но учитывай чужой опыт. Ты должен знать, на какие подводные камни налетали люди до тебя и здраво оценивать риски. |
WindWalker, есть ведь и другие порождающие паттерны ;)
|
из веше перечисленных примеров, ни в одном из них я бы синглтон не использовал бы даже пьяный.
|
отсюда вывод: не садись пьяным за руль и за комп :)
|
Цитата:
Подозреваю, что с помощью тех же синглтонов - перекрестившись и с полным осознанием того, что это неправильно, но куда деваться... Цитата:
Но от тебя ответ и не требуется. Вопрос зубрам, а не ламерам. |
| Часовой пояс GMT +4, время: 02:47. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.