Создание шаблона на примере одиночки для FD
Задача: создать шаблон для автоматического создания класса паттерна одиночки на примере флешдевелопа.
Решение: создание собственного шаблона.
Сразу оговорю, что ни на что не претендую. И подобное решение может быть применено для любой другой идеологически схожей задачи.
На практике это будет таким образом: мы правой кнопкой мыши клацаем по любой папке нашего проекта во ФД и в контекстном меню кроме стандартного набора видим собственноручно созданный.
Для начала идем в C:\Documents and Settings\имя пользователя\Local Settings\Application Data\FlashDevelop\Templates\ProjectFiles\AS3Project (для ХР, для ас3)
Там видим несколько файлов. За шаблон можно взять любой. Я взял Class.as.fdt, скопировал его в туже директорию, назвал Singletone. По сути это обычный текстовый файл, который можно открыть любым текстовым редактором, в т.ч. и в самом ФД.
Вот и вносим туда изменения, которые мы хотели бы видеть. Вообще-то немного проще взять готовый класс, из которого вы хотите сделать шаблон и вставить по образцу специальные теги.
Если вы знакомы с тем, что такое класс, то все и так интуитивно понятно, но на всякий случай опишу ряд ключевых "тегов":
$(Package) - название пакета (package)
$(FileName) - название класса
$(EntryPoint) - точка входа, т.е. то место в только что созданном классе, куда будет перемещена каретка курсора по умолчанию. В указанном примере это место сразу за объявлением класса на тот случай, если мы захотим унаследоваться от какого-либо другого класса.
Мой пример выглядит следующим образом:
package $(Package) $(CSLB){ /** $(CBI)* ... $(CBI)* @author $(DefaultUser) $(CBI)*/ public class $(FileName) $(EntryPoint)$(CSLB){ //base vars of singleton private static var instance:$(FileName); private static var allow:Boolean = false; public function $(FileName)() $(CSLB){ if (!allow) { throw new Error("Error of singleton"); } } /** * create singleton object * @return */ public static function getInstance():$(FileName) $(CSLB){ if (instance == null) { allow = true; instance = new $(FileName)(); allow = false; } return instance; } } }
При этом если мы хотим создать некоторый класс, то он будет иметь следующее содержание (на примере SharedObjectManager):
package managers { /** * ... * @author TanaTiX - Nikonov Anton */ public class SharedObjectManager { //base vars of singleton private static var instance:SharedObjectManager; private static var allow:Boolean = false; public function SharedObjectManager() { if (!allow) { throw new Error("Error of singleton"); } } /** * create singleton object * @return */ public static function getInstance():SharedObjectManager { if (instance == null) { allow = true; instance = new SharedObjectManager(); allow = false; } return instance; } } }
Singletone.rar
Всего комментариев 24
Комментарии
![]() ![]() |
|
iNils, согласен, была уже такая мысль, но до добавления записи в "блоги" (к сожалению мысль пришла не вовремя) не нашел как отредактировать.
Через какое-то время дополню. |
![]() ![]() |
|
А какие ещё новые шаблоны имеет смысл иметь под рукой?
|
![]() ![]() |
|
Psycho Tiger, вообще на тему разнообразия толком не заморачивался, но вот одиночка в моем случае то, что может использоваться относительно часто. А вообще мало ли какая задача...
|
![]() ![]() |
|
а code snippets разве не достаточно для этих целей ?
|
![]() ![]() |
|
inozemcev, на сколько я знаю, сниппеты не создают классы.
|
![]() ![]() |
|
Может кто знает, почему для синглтона пишут обычно метод getInstance(), а не геттер аля get instance() ? На других ресурсах такое тоже замечал. Просто интересно )
|
![]() ![]() |
|
Ну можно, да. Но зачем?
Проще сделать все функции и переменные класса - статическими. |
![]() ![]() |
|
chabapok, синглтон нужен когда класс синглтона должен реализовать интерфейс или от кого-то наследоваться.
|
![]() ![]() |
|
TanaTiX, да. Конечно почитал бы. В гугле - в основном статьи на тему "как?" а не "зачем?".
Впрочем, Psycho Tiger уже все разъяснил. |
![]() ![]() |
|
2й пунтк в гугле выдал это
|
![]() ![]() |
|
i.o. потому что в джаве нету гетеров и сетеров.
|
![]() ![]() |
|
TanaTiX, спасибо.
|
![]() ![]() |
|
А это разве из джавы вырос синглтон? А я думал, что он куда моложе
![]() |
![]() ![]() |
|
Вот так, например, мой выглядит.
Поместить папку Custom (не содержимое, а именно папку) в папку с AS3 шаблонами и искать в контекстном меню в пункте "Custom" ProjectManager'a. Это еще одна фишка FD (если вдруг кто не в курсе) - если есть папка в папке с шаблонами, он создаст отдельную группу-подменю в меню генерации классов. |
![]() ![]() |
|
Скорее всего замечательная статья. А я подожду более сложных шаблонов.
|
![]() ![]() |
|
А где прочитать про все теги?
$(CSLB) я понял делает отбой строки. |
|
Обновил(-а) LOS2008 28.11.2010 в 20:43
|
![]() ![]() |
|
![]() ![]() |
|
класс, как раз мне нужно сделать такую вещицу. спасибо.
|
Последние записи от TanaTiX
- Выравнивание окна ФП для дебага во ФД. (12.03.2012)
- Комменты для удобства (29.04.2011)
- Про анимацию сказ(JSFL). (22.02.2011)
- Создание шаблона на примере одиночки для FD (17.11.2010)