Показать сообщение отдельно
Старый 16.03.2008, 18:59
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 40  
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
Общий вид фабричного метода получается таким:
Код AS3:
package com.itechnica.svg.draw {
 
	public class DrawingCommand {
 
		public static const FILL:String = "F";
		public static const STYLE:String = "S";
		public static const MOVE:String = "M"; 
		public static const LINE:String = "L";
		public static const CURVE:String = "C";
 
		public static function create(type:String, ...args):DrawingCommand {
			switch (type) {
				case FILL:
					return new FillCommand(args[0], args[1]);
				break;
 
				case STYLE:
					return new StyleCommand(args[0], args[1], args[2]);
				break;
 
				case MOVE:
					return new MoveCommand(args[0], args[1]);
				break;
				case LINE:
					return new LineCommand(args[0], args[1]);
				break;
				case CURVE:
					return new CurveCommand(args[0], args[1], args[2], args[2]);
				break;
				default:
					throw new Error("com.itechnica.svg.draw.DrawingCommand.create("+type+", ...args) - unknown type");
			} 
		}
 
//		switch (d[0]) {
//			case FILL :
//				drawTarget.beginFill(dp[0], dp[1]);
//				break;
//			case "S" :
//				drawTarget.lineStyle(dp[0], dp[1], dp[2]);
//				break;
//			case "M" :
//				drawTarget.moveTo(dp[0], dp[1]);
//				break;
//			case "L" :
//				drawTarget.lineTo(dp[0], dp[1]);
//				break;
//			case "C" :
//				drawTarget.curveTo(dp[0], dp[1], dp[2], dp[3]);
//				break;
//		}
	}
}
И мы наметанным глазом видим, что по-сути, мы заменяем один нетипизированый доступ на другой.
В фабричный метод приходится передавать различные сущности в одних и тех же параметрах, а это неверно.

Поэтому отказываемся и от этого пути, и заходим с другой стороны: просто создаем классы команд с теми аргументами конструкторов, которые обеспечат должный уровень типизации.
__________________
http://realaxy.com


Последний раз редактировалось iNils; 20.12.2010 в 13:31.