Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   реализация паттерна singleton на AS3 (http://www.flasher.ru/forum/showthread.php?t=109596)

Iv 19.03.2008 16:09

Идея понятна, но дело совершенно не в этом.
Прелесть синглетона в том, что можно его быстро переделать в обычный класс и обратно.
Собственно это одна из причин, по которой не стоит увлекаться статическими методами.

WindWalker 19.03.2008 16:21

Во.
Есть интерфейс:
Код:

package {
        public interface IDoer {
                function doSomething():void;
        }
}

Вот класс, который использует синглтон:
Код:

package {
        public class User {
                public function User() {
                        var doer1:IDoer = new Singleton();
                        var doer2:IDoer = new Singleton();

                        doer1.doSomething();
                        doer2.doSomething();
                }
        }
}

А вот непосредственно реализация синглтона:
Код:

package {

        public class Singleton implements IDoer {
               
                private var realDoer:IDoer;

                public function Singleton() {
                    realDoer = RealSingleton.getInstance();
                }

                public function doSomething():void {
                        realDoer.doSomething();
                }
        }
}

internal class RealSingleton implements IDoer {

        private var counter:int = 0;
        private static var instance:RealSingleton;

        public static function getInstance():RealSingleton {
                if (!instance) instance = new RealSingleton();
                return instance;
        }

        public function doSomething():void {
                trace(counter+": Hello world!");
                counter++;
        }
}

Плюс такого подхода, в том, что никто извне не знает, что это синглтон.
Используют как обычный класс.
Таким образом, если мы решим отказаться от использования синглтона (например, потребуется несколько соединений к серверу), то меняем только один файл. Для остальных классов ничего не изменилось.

То есть уровень абстракции выше, переделка в обычный класс совершенно прозрачна.

BlooDHounD 19.03.2008 16:23

Цитата:

Сообщение от Iv
Идея понятна, но дело совершенно не в этом.
Прелесть синглетона в том, что можно его быстро переделать в обычный класс и обратно.
Собственно это одна из причин, по которой не стоит увлекаться статическими методами.

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

BlooDHounD 19.03.2008 16:27

WindWalker, а нафига делать синглтон, о котором никто не узнает? это уже не синлтон получает, а фигня какая-то.

WindWalker 19.03.2008 16:34

Это называет ин-кап-су-ля-ци-я.
Чем меньше мы знаем о внутреннем устройстве, тем легче живётся и крепче спится.

Про класс мы знаем. Инстанциируем, используем.
А про то, что он реализован через синглтон - не знаем и знать не хотим.
И если когда-нибудь он волшебным образом перестанет быть синглтоном (с сохранением интерфейса, логики и функциональности), то нас это никак не будет волновать.

Хочу обратить внимание, что класс-пользователь не использует статические методы и не содержит никаких упоминаний getInstance().

Iv 19.03.2008 16:41

BlooDHounD, можно поподробнее, с моими цитатами?

BlooDHounD 19.03.2008 17:03

Цитата:

Сообщение от Iv
BlooDHounD, можно поподробнее, с моими цитатами?

все цитаты чуть выше постами. перечитай сам, пожалуйста. а твои примеры я отношу к категории:
Цитата:

Сообщение от __etc
В абсолютном большинстве случаев

(с этой формулировкой ты соглаился)


WindWalker, мне всё равно как Вы это называете :) просто я не пониманию, зачем усложнять структуру приложения, даже если программист никогда не увидит внутренности :) по мне так проще вместо создания "непоймикакогосингтона" написать как-нить так:
Код:

                private static function $doSomething():void {
                        realDoer.doSomething();
                }
                public function doSomething():void {
                        $doSomething();
                }

и работает и быстрее, и нету никаких инстансов внутри.

Iv 19.03.2008 17:08

BlooDHounD, мне блевать хочется от такого общения как сейчас с тобой.
Научись отстаивать свою точку зрения, а не прятаться за общими фразами.

2morrowMan 19.03.2008 17:33

Iv, необращай внимания на тех, кто до этого еще не дорос, а то зря только время потратиш... я хоть посмеялся, пока читал посты отдельных пользователей))

BlooDHounD 19.03.2008 17:36

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


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

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