Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   [Паттерны] Singleton VS static const (http://www.flasher.ru/forum/showthread.php?t=211999)

gyfak 22.12.2015 17:44

Singleton VS static const
 
Недавно мне был задан вопрос о различиях шаблона
Одиночки и статической константы (или переменной).

В сети толкового ответа найти не смог.
Есть пост на хабре http://habrahabr.ru/post/103681 ,
но там говорят о статическом классе и другом языке.

Дополнительный вопрос: если объект это набор процедур и свойств,
то не проще ли создавать статичные процедуры и свойства.

Самое обидное, я понимаю что Одиночка практичнее статичных методов,
но объяснить не могу.

Буду признателен за ответы или ссылки.

callme 22.12.2015 19:03

Только синглтон может реализовывать интерфейс, наследовать класс.

Сам не пользуюсь ни синглтоном, ни статическими классами.

Если нужен глобальный доступ, кладу объект в глобальную переменную.

Код AS3:

package
{
    import flash.text.TextField;
 
    public class Global
    {
        static public var textField:TextField;
    }
}


Код AS3:

package
{
    import flash.display.Sprite;
    import flash.text.TextField;
 
    public class Main extends Sprite
    {
        public function Main()
        {
            Global.textField = new TextField();
        }
    }
}


GBee 22.12.2015 19:08

Цитата:

ни статическими классами
А что такое статический класс?

Код AS3:

package
{
    import flash.text.TextField;
 
    public class Global
    {
        static public var textField:TextField;
    }
}

Уж не это ли он?

callme 22.12.2015 19:23

GBee, тогда уж можно было зацепиться за "не пользуюсь". Ладно ни один не делаешь, но неужели прям ни одним не пользуешься? :)

А если по делу, то это единственный мой статический класс.

GBee 22.12.2015 19:28

Цитата:

Ладно ни один не делаешь, но неужели прям ни одним не пользуешься?
Эээ? Я этого не говорил. Все утилиты - статические эээ классы :о) А синглтонов во флексе и так полно. Я на самом деле тоже эту тонкую грань между статиком и синглтоном понять не могу.

Добавлено через 2 минуты
На хабровой ссылке описаны какие то дохленькие различия на мой взгляд. А уж наследовать синглтон это я уже не понимаю вообще целей.

gyfak 22.12.2015 19:31

Эм, я считал, что статических классов в as3 нет =( ну да ладно.

В том то и дилемма, одиночка нужен не для организации глобальной точки доступа, основная его задача - не дать создать больше одного экземпляра класса.

Т.е. данный шаблон расширяет собой статичный метод?

Добавлено через 2 минуты
Наследование как раз понятно - нужен тебе только один объект в игре, унаследовался от уже написанного класса и не замарачиваешься.

callme 22.12.2015 19:39

GBee, сам синглтон тоже может наследоваться от другого класса.

gyfak, статических классов в as3 нет, флешеры просто так привыкли называть классы, которые состоят только/большей частью из статических членов.

gyfak 22.12.2015 19:49

callme, ок, спасибо

Я так понял,
Код AS3:

public static const myClass:Sprite = new myClass();

и

Код AS3:

instance:myClass;

только тем и отличаются, что в первом случае,
мы можем в любом месте создать еще один объект myClass,
а одиночка не даст нам этого сделать.

А так, одна и та же глобальная точка доступа к объекту.

caseyryan 22.12.2015 19:52

Цитата:

только тем и отличаются, что в первом случае,
мы можем в любом месте создать еще один объект myClass,
а одиночка не даст нам этого сделать.

А так, одна и та же глобальная точка доступа к объекту.
Именно.
Но в ас3 полноценных синглтонов не может быть по простой причини отсутствия возможности создания приватных конструкторов.

callme 22.12.2015 19:58

Да, так и есть. А если мне понадобится чтобы объект существовал только в единственном экземпляре, то я выберу вариант с синглтоном, нежели вариант со статическим классом. Потому что статические классы сложны для понимания. Они должны выступать каркасом для построения экземпляра. А тут получается, они и сами по себе объект, а еще и каркасом выступают, но никакие экземпляры не будут создаваться на самом деле. Мне такое тяжело понять.


Часовой пояс GMT +4, время: 19:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.