Понимание Фабрики и я должен использовать их? - PullRequest
5 голосов
/ 12 февраля 2010

Я никогда раньше не использовал фабрики по той простой причине, что не понимаю, когда они мне нужны. В свободное время я работал над небольшой игрой и решил использовать FMOD для звука. Я посмотрел на обертку, разработанную для OpenAL (отличную настройку звука), и она выглядела примерно как ...

SoundObject * SoundObjectManager * SoundObjectFactory *

SoundObject был в основном экземпляром каждого звукового объекта. SoundObjectManager просто управляет всеми этими объектами. Это достаточно просто и имеет много смысла, но я не понимаю, что делает фабрика или что она использует. Я читал на Factorys, но до сих пор не понимаю их.

Любая помощь будет оценена!

Ответы [ 4 ]

2 голосов
/ 12 февраля 2010

Думайте о Фабрике как о «виртуальном конструкторе». Это позволяет вам создавать объекты с общим типом времени компиляции, но с разными типами времени выполнения. Вы можете изменить поведение, просто попросив Factory создать экземпляр другого типа времени выполнения.

1 голос
/ 12 февраля 2010

Гипотетическая ситуация: я пишу звуковую библиотеку, которую хочу запустить на нескольких платформах. Я постараюсь сделать как можно большую часть кода независимой от платформы, но, безусловно, некоторые из них должны будут измениться для Windows, OSX и Linux.

Итак, я пишу все эти разные реализации, но я не хочу, чтобы конечный пользователь заставлял свою программу зависеть от Linux или Windows или чего-то еще. Я также не хочу поддерживать 4 различных интерфейса для моего API. (Обратите внимание, что это лишь некоторые из причин, по которым вы можете создать фабрику - безусловно, существуют другие ситуации).

Итак, я определил этот замечательный базовый SoundObject базовый класс, который определяет все методы, которые получает клиент. Затем я делаю мои LinuxSoundObject, WindowsSoundObject и еще 5 других производными от SoundObject. Но я собираюсь скрыть все эти конкретные реализации от пользователя и предоставить им только SoundObject. Вместо этого вы должны позвонить моему SoundObjectFactory, чтобы получить то, что вам кажется простым SoundObject, но на самом деле я выбрал правильный тип времени выполнения для вас и создал его сам.

2 года спустя появляется новая ОС, которая вытесняет Windows. Вместо того чтобы заставлять вас переписывать свое программное обеспечение, я просто обновляю свою библиотеку для поддержки новой платформы, и вы никогда не увидите изменений в интерфейсе.

Это все довольно надумано, но, надеюсь, вы поняли идею.

Фабрики изолируют потребителей интерфейса от того, какой тип среды выполнения (т.е. реализация) действительно используется.

1 голос
/ 12 февраля 2010

Фабрики используются, когда реализация должна быть параметризована. FMOD является кроссплатформенным, и ему необходимо решить, какую конкретную реализацию вам предложить для вашей платформы. Это то, что делает Фабрика. Существует два основных образца Абстрактный шаблон фабрики и Шаблон метода фабрики .

0 голосов
/ 12 февраля 2010

Фабрики могут использоваться для реализации инверсии управления, а также для отделения кода реализации («нового») от логики ваших компонентов. Это полезно при написании модульных тестов, так как вы можете не захотеть, чтобы тестируемые объекты создавали кучу других объектов.

...