Хранение изделий Заводского образца
-
19-09-2019 - |
Вопрос
Прямо сейчас у меня есть оператор switch, который используется для создания объектов на основе строки.Существует три типа объектов, которые расширяют абстрактный универсальный объект.Мне действительно следовало бы использовать фабричный шаблон, который я выясняю прямо сейчас.Таким образом, моя проблема заключается:Я ценю гибкость фабричного шаблона, но прямо сейчас я сохраняю потенциальные продукты в специальных словарях, посвященных их типу.
_type1[location] = ArrayOfType1s
_type2[location] = ArrayOfType2s
_type3[location] = ArrayOfType3s
Это работает, если у меня только три типа, но если я решу добавить больше, используя гибкость заводского шаблона, то возникнет проблема с их сохранением, поскольку мне придется создавать специальный словарь каждый раз, когда я его добавляю...
Единственный ответ, который я могу придумать, - это вложить мои словари, что звучит довольно медленно.
_factoryOutput[type] = type[location] = ArrayOfTypes
Вероятно, это работоспособное решение, но кто-нибудь может предложить более чистое?Я работаю в AS3, но не стесняйтесь предоставить более общее решение.
Решение
Одним из возможных решений является реализация в ваших продуктах метода GetType().Это может просто возвращать строку или int, которая уникальна для данного типа продукта.Ты мог бы динамически создавайте уникальные массивы для типов продуктов по мере их появления (т.е.:проверьте, существует ли массив для типа, создайте, если необходимо, перед сохранением) или, в качестве альтернативы, вы могли бы просто сохранить все типы продуктов в одном массиве и иметь функции фильтрации для их извлечения.Примером этого может быть:
function getProductsByType(type:String):Array {
var matched:Array = [];
for(//loop over all products) {
//if type is what your looking for, push into matched array
}
return matched;
}