Просмотр полной версии : Паттерны Singleton VS static const
Недавно мне был задан вопрос о различиях шаблона
Одиночки и статической константы (или переменной).
В сети толкового ответа найти не смог.
Есть пост на хабре http://habrahabr.ru/post/103681 ,
но там говорят о статическом классе и другом языке.
Дополнительный вопрос: если объект это набор процедур и свойств,
то не проще ли создавать статичные процедуры и свойства.
Самое обидное, я понимаю что Одиночка практичнее статичных методов,
но объяснить не могу.
Буду признателен за ответы или ссылки.
Только синглтон может реализовывать интерфейс, наследовать класс.
Сам не пользуюсь ни синглтоном, ни статическими классами.
Если нужен глобальный доступ, кладу объект в глобальную переменную.
package
{
import flash.text.TextField;
public class Global
{
static public var textField:TextField;
}
}
package
{
import flash.display.Sprite;
import flash.text.TextField;
public class Main extends Sprite
{
public function Main()
{
Global.textField = new TextField();
}
}
}
ни статическими классами
А что такое статический класс?
package
{
import flash.text.TextField;
public class Global
{
static public var textField:TextField;
}
}
Уж не это ли он?
GBee, тогда уж можно было зацепиться за "не пользуюсь". Ладно ни один не делаешь, но неужели прям ни одним не пользуешься? :)
А если по делу, то это единственный мой статический класс.
Ладно ни один не делаешь, но неужели прям ни одним не пользуешься?
Эээ? Я этого не говорил. Все утилиты - статические эээ классы :о) А синглтонов во флексе и так полно. Я на самом деле тоже эту тонкую грань между статиком и синглтоном понять не могу.
Добавлено через 2 минуты
На хабровой ссылке описаны какие то дохленькие различия на мой взгляд. А уж наследовать синглтон это я уже не понимаю вообще целей.
Эм, я считал, что статических классов в as3 нет =( ну да ладно.
В том то и дилемма, одиночка нужен не для организации глобальной точки доступа, основная его задача - не дать создать больше одного экземпляра класса.
Т.е. данный шаблон расширяет собой статичный метод?
Добавлено через 2 минуты
Наследование как раз понятно - нужен тебе только один объект в игре, унаследовался от уже написанного класса и не замарачиваешься.
GBee, сам синглтон тоже может наследоваться от другого класса.
gyfak, статических классов в as3 нет, флешеры просто так привыкли называть классы, которые состоят только/большей частью из статических членов.
callme, ок, спасибо
Я так понял,
public static const myClass:Sprite = new myClass();
и
instance:myClass;
только тем и отличаются, что в первом случае,
мы можем в любом месте создать еще один объект myClass,
а одиночка не даст нам этого сделать.
А так, одна и та же глобальная точка доступа к объекту.
caseyryan
22.12.2015, 19:52
только тем и отличаются, что в первом случае,
мы можем в любом месте создать еще один объект myClass,
а одиночка не даст нам этого сделать.
А так, одна и та же глобальная точка доступа к объекту.
Именно.
Но в ас3 полноценных синглтонов не может быть по простой причини отсутствия возможности создания приватных конструкторов.
Да, так и есть. А если мне понадобится чтобы объект существовал только в единственном экземпляре, то я выберу вариант с синглтоном, нежели вариант со статическим классом. Потому что статические классы сложны для понимания. Они должны выступать каркасом для построения экземпляра. А тут получается, они и сами по себе объект, а еще и каркасом выступают, но никакие экземпляры не будут создаваться на самом деле. Мне такое тяжело понять.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.