Вы хотите создать объект, поэтому то, что вы ищете, подпадает под действие шаблонов творческого проектирования. Я не уверен, что он идеально подходит для ваших нужд, но шаблон Factory соответствует некоторым из ваших потребностей.
В типичном случае использования шаблона Factory вы должны указать тип ( как String
или перечисление) к методу и получить соответствующий объект. Ваш logi c будет немного сложнее, так как будет несколько входов и несколько ветвлений logi c для определения правильного типа. Например, вы не можете просто использовать «рубашку» String
для получения вашего объекта, так как цвет встроен в типы (у вас есть RedShirt
, BlueShirt
, et c ...).
В заключение, я хотел бы задать себе вопрос, почему RedShirt
и BlueShirt
должны быть разных типов. Вместо того чтобы использовать шаблон проектирования для решения проблемы, я бы пересмотрел исходный дизайн. Например, вы можете использовать класс Apparel extends Product
, содержащий члены color
и type
, чтобы вы могли запрашивать эту информацию независимо от типа Apparel
. Конечно, используйте здравый смысл в зависимости от ситуации.