2013-08-30 11 views
6

Was sind die Unterschiede zwischen Brückenmuster und Abhängigkeitsinjektion?Brückenmuster im Vergleich zur Abhängigkeitsinjektion

Für die beiden Muster haben wir eine abstrakte Klasse mit der Implementierung einer anderen Abstraktion. Es gibt das Bridge Pattern UML-Diagramm unten.

enter image description here

+2

Ich stimme nicht mit denen, die behaupten, DI ist kein Design-Muster. Wenige würden argumentieren MVC ist kein Design-Muster, und es hat auch mehrere Implementierungsmuster. –

Antwort

6

AFAIK Dependency Injection ist nicht ein Entwurfsmuster sondern eine Designrichtlinien im SOLID principles definiert.

So Brücke Musterverwendet Dependency Injection in das erforderliche polymorphe Verhalten zu erreichen, wo die DrawingAPI im Konstruktor injiziert wird, um die Shape von der konkreten Umsetzung von API zu entkoppeln.

Snippet aus dem Beispiel von Bridge Pattern of Wikipedia

protected Shape(DrawingAPI drawingAPI){ 
     this.drawingAPI = drawingAPI; 
} 

Brücke Pattern - Ein Entwurfsmuster

Dependency Injection - Design-Richtlinie oder Prinzip

+1

Ich stimme zu, was Sie gesagt haben, aber als ich die Definition aus dem Wiki gelesen habe, hieß es: "Abhängigkeitsinjektion ist ein Softwaredesignmuster, das eine Inversion der Kontrolle für Softwarebibliotheken implementiert". Also denken Sie, der Begriff "Entwurfsmuster" ist falsch oder würde es sein richtig in einer Art von Sicht? – fmchan

+0

@fmchan IMHO Dependency-Injektion ist ein Prinzip und nicht ein Design-Muster. Es bildet den Kern vieler GoF-Entwurfsmuster und ist eines der grundlegenden Prinzipien von SOLID. –

4

Sie Dependency tun können mehrere Mechanismen Injection durch . Der Brückenmechanismus ist nur einer von ihnen. Einfache Schnittstellenimplementierung ist eine andere. Klassenweben und andere dynamische Tricks noch eine andere.

Dependency Injection ist eine Entwicklung/Design-Technik, aber kein Muster, da es auf verschiedene Arten implementiert werden kann.

Wenn Sie ein wenig mehr darüber denken, könnten Sie Dependency Injection als Software Architecture Pattern (aber immer noch nicht als Design) betrachten, da es eine übliche Art ist, eine Reihe von Architekturaspekten zu behandeln (Testbarkeit, Konfigurierbarkeit, Modularität) , etc).

Mit anderen Worten, Dependency Injection könnte effektiv als ein Muster betrachtet werden, aber auf einer anderen Ebene: Architektur, nicht Design.

1

Das Brückenmuster verwendet Dependency Inversion, um die Brücke zu arbeiten, d. H. Die Abstraktions-Basisklasse/Schnittstelle hängt von der Implementor-Schnittstelle ab.

Dependency Injection ist die am häufigsten verwendete Implementierung des Dependency Inversion-Prinzips.

3

Viele Entwurfsmuster haben ähnliche UML-Diagramme.

Das Brückenmuster ist völlig anders als Dependency Injection.

Dependency Injection - Eine Möglichkeit zum einfachen Einfügen (und Tauschen) von Abhängigkeiten in Code entweder zur Laufzeit oder zur Kompilierzeit.

Bridge Pattern - Eine Möglichkeit, eine zusätzliche Schnittstelle zwischen verschiedenen Systemen zu haben. Die Bridge ist die Kommunikationsschicht zwischen Ihrem Code und dem anderen System.Zum Beispiel sind die zwei am häufigsten verwendeten Bridge-Pattern-Implementierungen in Java JDBC (die über eine Driver Bridge mit einer Datenbank kommuniziert) und Swing (die eine Bridge verwendet, um mit der Benutzeroberfläche des Betriebssystems zu kommunizieren). Dadurch kann das andere System ausgelagert oder geändert werden, ohne die Kommunikationsschicht auf Ihrem System zu beeinflussen oder zu ändern.

EDIT: Vergessen zu erwähnen, dass eine Brücke auch beide Seiten auf der Brücke zu entwickeln und unabhängig voneinander ändern kann, ohne die anderen zu beeinflussen. Dies liegt daran, dass die Bridge beide Seiten voneinander isoliert.

+0

Ist es richtig zu sagen, dass das Bridge-Muster DI für die Implementor-Instanziierung verwendet? – Warlock

+0

@Warlock ja ich würde das sagen. DI ist ein Konzept und kein Designmuster an sich. Es gibt nichts wie ein Muster darin. DI wird schon lange vor der Veröffentlichung des GoF-Buches verwendet. Also würde ich sagen, es ist eine Richtlinie zum Schreiben von lose gekoppeltem Code als ein Designmuster. –

+1

@Warlock Sie können DI für beide Seiten der Bridge-Implementierung Instanziierung verwenden, aber es ist nicht erforderlich. – dkatzel

Verwandte Themen