Не зная окружающего кода, я бы предложил поместить любую конструкционную логику в фабричный объект.Если это излишне, то я бы сказал, что ваш код в порядке.Извлечение его из цикла в вспомогательный метод на самом деле просто добавляет еще один уровень косвенности, который не только сложнее для чтения, но и менее эффективен, поскольку вы вводите еще один вызов метода в стеке.
Использование фабричного объекта хорошо, если ваш класс действительно не заинтересован в том, как создаются вещи, а просто нуждается в одном или нескольких экземплярах чего-либо.Таким образом, фабрика отвечает за создание объекта, и вы получаете хорошее разделение интересов.
Я бы не советовал создавать прокси-структуру, которая имеет целью только установку свойств вашего экземпляра.Я думаю, что это анти-паттерн, потому что он предпочитает наследование перед композицией и делает это исключительно для повторного использования кода.Но это означает, что вы привязываетесь к конкретной реализации, которая, скорее всего, не то, что вам нужно.То, что ваше текстовое поле имеет определенное значение, не означает, что оно является другим типом.
Так может выглядеть ваш код при использовании фабричного шаблона,во-первых, фабрика формата:
public interface FormatFactory
{
function getInstance():TextFormat;
}
public class TitleFormatFactory implements FormatFactory
{
public function getInstance():TextFormat
{
var format:TextFormat = new TextFormat();
format.size = 10;
format.font = "Arial";
format.color = 0xfff200;
return format;
}
}
Фабрики могут или не могут быть параметризованы:
public interface TextFieldFactory
{
function getInstance(text:String, position:Point, format:TextFormat):TextField;
}
public class TitleFactory implements TextFieldFactory
{
public function getInstance(text:String, position:Point, format:TextFormat):TextField
{
var title:TextField = new TextField();
title.selectable = false;
title.wordWrap = true;
title.text = text;
title.x = position.x;
title.y = position.y;
title.setTextFormat(format);
return title;
}
}
Наконец, вот как вы должны использовать код:
var formatFactory:FormatFactory = new TitleFormatFactory();
var titleFactory:TextFieldFactory = new TitleFactory();
var format:TextFormat = formatFactory.getInstance();
for (var i = 0; i < arrThumbPicList.length; i++)
{
var position:Point = new Point(106, 331 + 55 * i);
var title:TextField = titleFactory.getInstance(text, position, format);
container.addChild(title);
}
Помимо того, что вы читаете, огромным преимуществом является то, что теперь вы можете поменять местами реализации фабрик и, таким образом, изменить, какие компоненты вы используете, без необходимости менять реальную логику.Все, что вам нужно сделать, это изменить ссылки на фабрики.
Кроме того, разделяя проблемы, вы облегчаете сосредоточиться на одном аспекте своего кода и, таким образом, рискует стать причиной появления ошибок, и если выТем не менее, их часто легче обнаружить и исправить.Более того, гораздо проще выполнить модульное тестирование кода, когда вы разделяете задачи и, что более важно, логику создания и бизнес-логику.