продлить класс Singleton? - PullRequest
       11

продлить класс Singleton?

1 голос
/ 27 апреля 2009

Есть ли способ создать подобный шаблонному одноэлементному классу, чтобы при его расширении расширенный класс также являлся одноэлементным классом, чтобы я мог быстро создать новый одноэлементный класс только для моего расширения шаблонного одноэлементного класса? Я использую ActionScript 3.0, если это имеет значение.

Спасибо.

Ответы [ 5 ]

7 голосов
/ 27 апреля 2009

Шаблон Singleton разработан таким образом, что тип не должен наследоваться. Я не знаком с ActionScript, но наличие одноэлементного типа, который также может быть расширен, кажется ошибкой.

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

5 голосов
/ 27 апреля 2009

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

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

Однако, одну вещь, которую вы можете сделать, это создать интерфейс Singleton, если все ваши синглтоны нуждаются в общем наборе функций, таких как деструкторы для чистой выгрузки и т. Д. Любые другие хаки для этой работы (я могу вспомнить немного) - я не уверен, что это будет этично для меня, чтобы сказать вам, потому что синглтоны лучше использовать редко (ИМХО).

0 голосов
/ 21 сентября 2010

В Java, в одноэлементном классе, конструктор private ! Таким образом, если у класса X есть закрытый конструктор, если вы попытаетесь создать его подкласс в классе Y, компилятор скажет, что он не может вызвать конструктор super () класса X, потому что он не имеет публичной видимости. Так что в Java мы не можем подкласс синглтона, я думаю: /

0 голосов
/ 28 апреля 2009

Flex Framework использует этот шаблон для нескольких менеджеров.

Если вы посмотрите на код Flex для mx.core.Singleton, он работает, поддерживая отображение имени класса на экземпляр этого класса. Поэтому перед созданием первого экземпляра для синглтона вы можете создать экземпляр любого класса в иерархии.

0 голосов
/ 28 апреля 2009

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

Вопрос в том, удобно ли это делать? Если вы попытаетесь, вы обнаружите, что вам нужно заново реализовать (переопределить) большую часть поведения, определенного в базовом классе. Вы могли бы также начать новый класс с нуля. Что может быть лучше, так это создать интерфейс Singleton, который вместо этого определяет требуемое поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...