Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Регистрация Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > TanaTiX

Оценить эту запись

Создание шаблона на примере одиночки для FD

Запись от TanaTiX размещена 17.11.2010 в 20:42
Обновил(-а) TanaTiX 18.11.2010 в 02:16

Задача: создать шаблон для автоматического создания класса паттерна одиночки на примере флешдевелопа.

Решение: создание собственного шаблона.

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

На практике это будет таким образом: мы правой кнопкой мыши клацаем по любой папке нашего проекта во ФД и в контекстном меню кроме стандартного набора видим собственноручно созданный.

Для начала идем в C:\Documents and Settings\имя пользователя\Local Settings\Application Data\FlashDevelop\Templates\ProjectFiles\AS3Project (для ХР, для ас3)
Там видим несколько файлов. За шаблон можно взять любой. Я взял Class.as.fdt, скопировал его в туже директорию, назвал Singletone. По сути это обычный текстовый файл, который можно открыть любым текстовым редактором, в т.ч. и в самом ФД.
Вот и вносим туда изменения, которые мы хотели бы видеть. Вообще-то немного проще взять готовый класс, из которого вы хотите сделать шаблон и вставить по образцу специальные теги.
Если вы знакомы с тем, что такое класс, то все и так интуитивно понятно, но на всякий случай опишу ряд ключевых "тегов":
$(Package) - название пакета (package)
$(FileName) - название класса
$(EntryPoint) - точка входа, т.е. то место в только что созданном классе, куда будет перемещена каретка курсора по умолчанию. В указанном примере это место сразу за объявлением класса на тот случай, если мы захотим унаследоваться от какого-либо другого класса.
Мой пример выглядит следующим образом:
Код AS3:
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;
		}
	}
}
После всех проделанных изменений наблюдаем следующую картину:
Название: fd-01.jpg
Просмотров: 837

Размер: 82.1 Кб
При этом если мы хотим создать некоторый класс, то он будет иметь следующее содержание (на примере SharedObjectManager):
Код AS3:
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

Комментарии

Старый 18.11.2010 00:20 iNils вне форума
iNils
 
Аватар для iNils
Я пользователь FD, мне не нужно что либо показывать и объяснять, я сам могу много рассказать и показать, но давайте представим, что я никогда не пользовался FD. И что я вижу? Ничего! Какой то архив, который нужно качать. А я хочу видеть здесь и сейчас! Без всяких скачиваний. Многим это просто лень, а представьте каково будет комментаторам?

PS. Тот же FD можно прекрасно использовать для просмотра и редактирования шаблонов.
Старый 18.11.2010 00:52 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
iNils, согласен, была уже такая мысль, но до добавления записи в "блоги" (к сожалению мысль пришла не вовремя) не нашел как отредактировать.
Через какое-то время дополню.
Старый 18.11.2010 12:50 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
А какие ещё новые шаблоны имеет смысл иметь под рукой?
Старый 18.11.2010 13:03 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Psycho Tiger, вообще на тему разнообразия толком не заморачивался, но вот одиночка в моем случае то, что может использоваться относительно часто. А вообще мало ли какая задача...
Старый 18.11.2010 13:30 inozemcev вне форума
inozemcev
 
Аватар для inozemcev
а code snippets разве не достаточно для этих целей ?
Старый 18.11.2010 14:24 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
inozemcev, на сколько я знаю, сниппеты не создают классы.
Старый 18.11.2010 15:15 i.o. вне форума
i.o.
 
Аватар для i.o.
Может кто знает, почему для синглтона пишут обычно метод getInstance(), а не геттер аля get instance() ? На других ресурсах такое тоже замечал. Просто интересно )
Старый 18.11.2010 19:06 chabapok вне форума
chabapok
Ну можно, да. Но зачем?
Проще сделать все функции и переменные класса - статическими.
Старый 18.11.2010 19:31 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
chabapok, синглтон нужен когда класс синглтона должен реализовать интерфейс или от кого-то наследоваться.
Старый 18.11.2010 19:31 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
chabapok, почитали бы о том какие плюсы у данного подхода (я про сингл)
А вообще, дело не в конкретном паттерне, я про возможности ФД рассказывал, если это кому-то еще не было известно.

i.o., мне так проще, знать, что это функция, которая возвращает некоторое значение (в данном случае экземпляр класса). Но это все дело такое, на вкус и цвет. В моем случае это скорее привычка. Может кто поправит и дополнит...
Старый 18.11.2010 20:13 chabapok вне форума
chabapok
TanaTiX, да. Конечно почитал бы. В гугле - в основном статьи на тему "как?" а не "зачем?".

Впрочем, Psycho Tiger уже все разъяснил.
Старый 18.11.2010 21:09 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
2й пунтк в гугле выдал это
Старый 18.11.2010 21:38 BlooDHounD вне форума
BlooDHounD
 
Аватар для BlooDHounD
i.o. потому что в джаве нету гетеров и сетеров.
Старый 19.11.2010 00:29 chabapok вне форума
chabapok
TanaTiX, спасибо.
Старый 19.11.2010 00:30 Сайлас вне форума
Сайлас
А это разве из джавы вырос синглтон? А я думал, что он куда моложе
Старый 19.11.2010 12:46 Mur4ik вне форума
Mur4ik
Еще более продвинутый вариант сделать шаблон для ASClassWizard, тогда будет возможность выбирать от кого наследовать и какой интерфейс реализовывать и создавать пустышки реализуемых методов автоматом.
Посомтрите как это сделано на примере шаблона класса (Class.as.fdt и Class.as.fdt.wizard)
Старый 19.11.2010 14:54 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Mur4ik, вот я кстати хотел попробовать. Сделал аналогично как в 1м сообщении описывал, но визард отрабатывать свое отказался. Как его настроить, чтоб он был в приоритете? И можно ли для него свои параметры устанавливать? Если да, то как?
Старый 19.11.2010 18:54 Mur4ik вне форума
Mur4ik
Нужно добавить такой же файл но с добавкой уже ".wizard", в таком случае файл .as.fdt может быть вообще пустым. Говорю же погляди по аналогии с Class.as.fdt и Class.as.fdt.wizard. Собственно там же в Class.as.fdt.wizard и параметры подсмотришь для наследования и имплементации интерфейсов.
Старый 19.11.2010 22:01 Mur4ik вне форума
Mur4ik
Вот так, например, мой выглядит.
Поместить папку Custom (не содержимое, а именно папку) в папку с AS3 шаблонами и искать в контекстном меню в пункте "Custom" ProjectManager'a.
Это еще одна фишка FD (если вдруг кто не в курсе) - если есть папка в папке с шаблонами, он создаст отдельную группу-подменю в меню генерации классов.
Старый 21.11.2010 01:06 TanaTiX вне форума
TanaTiX
 
Аватар для TanaTiX
Mur4ik, а возможно добавить свои параметры, помимо тех, что предустановлены?
Т.е. добавить какое-то текстовое поле, и в зависимости от того, что в него будет введено - выводить результат.
Старый 22.11.2010 21:05 dimarik вне форума
dimarik
 
Аватар для dimarik
Скорее всего замечательная статья. А я подожду более сложных шаблонов.
Старый 28.11.2010 20:40 LOS2008 вне форума
LOS2008
А где прочитать про все теги?

$(CSLB) я понял делает отбой строки.
Обновил(-а) LOS2008 28.11.2010 в 20:43
Старый 28.11.2010 21:00 iNils вне форума
iNils
 
Аватар для iNils
Старый 13.01.2011 01:49 Хомяк вне форума
Хомяк
 
Аватар для Хомяк
класс, как раз мне нужно сделать такую вещицу. спасибо.
 

 


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


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