У меня есть ситуация, когда нам нужно выяснить тип объекта, который должен обрабатывать данную спецификацию и повторно использовать объект. Вот пример:шаблон проектирования для интерпретации типа объекта для использования
interface ICar {
int getMaxSpeed();
}
class Mercedes implements ICar {}
class Ferrari implements ICar {}
class Jauguar implements ICar {}
Использование:
for(Spec spec : specs) { //spec will contain only a blob.. not a actual car type; I need to interpret it somehow
//do something here to match spec with type of car..
ICar car = getSpecificCarSomehowWithoutSwitchCase(spec);
}
Я подумал о двух возможных способов сделать это:
Использование Builder \ Abstract Factory шаблон для интерпретации и создания автомобиля (или вернуть уже существующий объект)
Добавить метод «IsMe» в ICar, объединить экземпляров объектов Car и называть их параметром spec и возвращать true, если это так.
Мне нравится подход № 2, особенно потому, что я могу и хочу повторно использовать уже созданные объекты. Я посмотрел на шаблон дизайна пула объектов, но метод «checkout» не берет ключ \ crietrion для поиска объектов.
Я пропустил какой-то образец \ подход?
Заранее благодарен, -Ний.
Это называется «Цепь ответственности», и я не уверен это то, что ему нужно. –
Спасибо @ValentinYanakiev, но вы неверны: http://sourcemaking.com/design_patterns/command и http://www.codeproject.com/Articles/39166/Using-the-Chain-Of-Command-Design-Pattern-Concepts , Как я уже сказал, это также называется комбинацией ** Command **, и он мог бы на самом деле реализовать ее для обработки своей логики. Я не имел в виду схему цепочки ответственности, как это определено здесь: http://sourcemaking.com/design_patterns/chain_of_responsibility – Coldstar
Команда представляет собой поведенческий шаблон, который предназначен для инкапсуляции действия и абстрагирования его от субъекта. Он не предназначен для создания. Для создания у вас есть шаблоны создания, такие как Factory, Abstract Factory, Builder и т. Д. –