Вопрос

Прямо сейчас у меня есть оператор 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top