Frage

Ich habe Fabriken nie benutzt, bevor aus dem einfachen Grunde, verstehe ich nicht, wenn ich sie brauche. Ich habe auf ein kleines Spiel in meiner Freizeit gearbeitet, und ich beschloss BMVg für den Sound zu implementieren. Ich sah einen Wrapper für OpenAL (verschiedene Sound-Setup) entworfen und es sah so etwas wie ...

* Klangobjekt SoundObjectManager * SoundObjectFactory *

Die Klangobjekt war im Grunde die Instanz jedes Klangobjekt. Die SoundObjectManager schafft es alle diese Objekte. Dies ist gerade nach vorne genug und macht viel Sinn, aber ich habe nicht, was die Fabrik tut oder was es verwendet wird. Ich habe auf Factorys zu lesen, aber noch nicht wirklich sich erhalten.

Jede mögliche Hilfe würde geschätzt!

War es hilfreich?

Lösung

Denken Sie an Fabrik als „virtueller Konstruktor“. Damit können Sie Objekte mit einem gemeinsamen Kompilierung Typ, aber unterschiedlichen Laufzeittypen konstruieren. Sie können das Verhalten einfach wechseln, indem Sie die Fabrik zu sagen eine Instanz eines anderen Laufzeittypen zu erstellen.

Andere Tipps

Fabriken verwendet werden, wenn die Umsetzung Bedarf parametrisiert werden. FMOD ist Cross-Plattform, muss es, was die Umsetzung konkret entscheiden Sie für Ihre Plattform zu geben. Das ist, was die Fabrik tut. Es gibt zwei Haupt Patterns Abstrakte Fabrik und Factory Method Pattern .

Hypothetische Situation: Ich schreibe eine Sound-Bibliothek, dass ich auf mehreren Plattformen ausgeführt werden soll. Ich werde versuchen, so viel Code wie möglich plattformunabhängig zu machen, aber sicherlich einige davon müssen für Windows im Vergleich zu OSX im Vergleich zu Linux wechseln.

Also habe ich alle diese verschiedenen Implementierungen schreiben, aber ich will nicht der Endbenutzer zu machen haben, ihre Programm hängen von Linux oder Windows oder was auch immer. Ich will auch nicht 4 verschiedene Schnittstellen zu meinem API halten. (Man beachte, das sind nur einige der Gründe, warum Sie vielleicht eine Fabrik schaffen - es gibt sicherlich andere Situationen).

Also habe ich dieses schöne generische SoundObject Basisklasse definieren, dass alle definiert die Methoden erhält der Client verwendet wird. Dann mache ich meine LinuxSoundObject, WindowsSoundObject und 5 andere stammen aus SoundObject. Aber ich werde alle diese konkrete Implementierungen von dem Benutzer verstecken und bieten nur diese mit einem SoundObject. Stattdessen müssen Sie meinen SoundObjectFactory zu greifen nennen, was Sie erscheint eine einfache alte SoundObject zu sein, aber wirklich habe ich den richtigen Laufzeittyp für Sie ausgewählt und instanziiert es selbst.

2 Jahre später, ein neues Betriebssystem kommt und verdrängt Sie Windows. Stattdessen Sie zwingen die Software neu zu schreiben, ich habe gerade meine Bibliothek aktualisieren, um die neue Plattform zu unterstützen und Sie nie eine Änderung an der Schnittstelle sehen.

Das ist alles ziemlich gekünstelt, aber hoffentlich bekommen die Idee.

Fabriken isolieren Verbraucher von einer Schnittstelle aus, was Typ Laufzeit (das heißt Implementierung) ist wirklich verwendet werden.

können Fabriken verwendet werden Inversion of Control zu implementieren und Instanziierung Code zu trennen (die ‚neuen der) von der Logik Ihrer Komponenten. Dies ist hilfreich, wenn Sie schreiben Unit-Tests, da die Objekte nicht geprüft wurden, können eine Reihe von anderen Objekten erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top