Показать сообщение отдельно
Старый 29.01.2015, 22:43
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 12  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,922
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Но судя из моего поста можно подумать, что я все действия делаю в Main. Нет, это не так.
Я привёл реализацию панели в Main только для примера. В этом плане слушайте Wolsh
Цитата:
Если у Вас Мейн должен знать все о какой-то тридевятой кнопке в тридесятом контейнере, значит Вы не разделили ответственность по объектам и Мейн перегружен. Ему нужны министры, а министрам — менеджеры, организовывающие персонал. Создавайте цепочки иерархии, компануйте однотипные задачи, не валите все в одну кучу Мейн.
Например, если мы пишем фотошоп, и нам нужна перетаскиваемая панель инструментов с кнопками и крестиком для закрытия, айда делаем вот так
Код AS3:
package 
{
	import flash.display.Sprite;
 
	/**
	 * ...
	 * @author ZackMercury
	 */
	public class InstrumentsPanel extends Sprite 
	{
		private var _panel:Panel;
 
		public function IntrumentsPanel()
		{
			_panel = new Panel();
			_panel.addButton(..., buttonClicked);
 
			//Создаём задний фон панели для перетаскивания при зажатии на нём мыши и крестик для закрытия, опущу этот момент, ибо тут всё элементарно.
			...
			addChild(_panel);
		}
 
		private function buttonClicked(e:MouseEvent):void
		{
			switch((e.target as Button).caption)
			{
				case "...":
					//todo, здесь выбираем текущий инструмент и записываем в публичное свойство, чтобы область рисования выбирала его
					break;
				case "...":
					//todo
					break;
				default:
					throw new Error("No action for this button");
			}
		}
	}
}
Данный приём называется "композиция", и описан в первых главах книги Колина Мука.
__________________
There is no thing in this world that is not simple.


Последний раз редактировалось ZackMercury; 29.01.2015 в 23:44.