У меня есть класс в Ruby, который содержит некоторые вещи, я буду называть FooBox
:Как переключить реализацию во время создания экземпляра?
class FooBox
...
end
У меня есть два возможных магазин бэк-данные для FooBox
называемых BoxA
и BoxB
с различными характеристиками, но один и тот же интерфейс:
class BoxA
include Enumerable
def put_stuff(thing)
...
end
end
class BoxB
include Enumerable
def put_stuff(thing)
...
end
end
Как я могу создать экземпляр FooBox
, и, на основе параметра, решить, следует ли поддержать его с BoxA
или BoxB
реализации? Я не хочу передавать реализацию в конструктор; Я только хочу передать что-то, чтобы определить, какой вид использовать.
class FooBox
def initialize(implementation_choice)
# ???
end
end
Можете ли вы уточнить, как «FooBox» может использовать любую из этих реализаций? И почему это имеет значение, если вы передали фактический экземпляр реализации или какой-либо флаг, чего вы пытаетесь избежать? – PinnyM
, так что вы хотите реализовать шаблон Factory Design в Ruby? – donnior
Потребитель FooBox не знает о поддержке реализации, как он хочет, чтобы данные обрабатывались (в абстрактном смысле). FooBox смотрит на параметр и идет «Я вижу, что вы запросили здесь. Позвольте мне выкопать мою реализацию для этого». –