2013-08-30 12 views
6

Jakie są różnice między wzorcem mostu a iniekcją zależności?Wzór mostu a wtrysk zależności Depresja

Dla obu wzorów mamy klasę abstrakcyjną z implementacją innej abstrakcji. Poniżej znajduje się diagram UML Bridge Pattern.

enter image description here

+2

Nie zgadzam się z tymi, którzy twierdzą, że DI nie jest wzorcem projektowym. Nieliczni twierdzą, że MVC nie jest wzorcem projektowym, a także ma wiele wzorów implementacji. –

Odpowiedz

6

AFAIK Zależność Injection nie wzór wzór ale wytyczne konstrukcja zdefiniowane w SOLID principles.

Więc Most wzórwykorzystuje iniekcji zależność w to, aby osiągnąć wymaganą polimorficzne gdzie DrawingAPI jest wstrzykiwany w konstruktorze oddzielić Shape od konkretnej implementacji API.

Fragment z przykładu Bridge Pattern of Wikipedia

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

Most Pattern - Wzór projekt

Dependency Injection - Projekt wytycznej lub zasada

+1

Zgadzam się z tym, co powiedziałeś, ale kiedy przeczytałem definicję z Wiki, powiedział: "wtrysk zależności to wzór oprogramowania, który implementuje inwersję kontroli dla bibliotek oprogramowania", więc czy uważasz, że termin "wzór projektu" jest zły lub byłby poprawić w pewnym widoku? – fmchan

+0

@fmchan Wstrzyknięcie zależności IMHO jest raczej zasadą niż wzorcem projektowym. Stanowi on rdzeń wielu wzorców projektowych GoF i jest jedną z podstawowych zasad SOLID. –

4

Można zrobić Dependency Injection poprzez kilka mechanizmów . Mechanizm Bridge jest tylko jednym z nich. Prosta implementacja interfejsu to kolejna. Tkanie klasowe i inne dynamiczne sztuczki jeszcze inne.

Dependency Injection to technika rozwoju/projektowania, ale nie jest szablonem, ponieważ można ją wdrożyć na kilka sposobów.

Myśląc nieco więcej na ten temat, można wziąć pod uwagę Injection Dependency jako wzór architektury oprogramowania (ale nadal nie jest to projektowy), w tym sensie, że jest to typowy sposób rozwiązania szeregu problemów architektonicznych (testowalność, konfigurowalność, modułowość itp.).

Innymi słowy, Injection Dependency Injection można skutecznie uznać za wzór, ale na innym poziomie: architektura, nie projekt.

1

Wzorzec mostu używa Dependency Inversion do wykonania pracy mostu, tzn. Klasa bazowa/interfejs abstrakcji zależy od interfejsu implementatora.

Wstrzykiwanie zależności jest najczęściej stosowaną implementacją zasady odwrócenia zależności (Dependency Inversion Principle).

3

Wiele wzorów wzorów ma podobne diagramy UML.

Wzór mostka jest zupełnie inny niż w przypadku iniekcji zależnej.

Dependency Injection - Sposób na łatwe wstawianie (i zamiany) zależności w kodzie w czasie wykonywania lub kompilacji.

Bridge Pattern - Sposób na dodatkowy interfejs między różnymi systemami. Most jest warstwą komunikacyjną między twoim kodem a innym systemem.Na przykład dwie najczęściej używane implementacje Bridge Pattern w Javie to JDBC (komunikuje się z bazą danych za pośrednictwem mostu Driver Bridge) i Swing (który używa Bridge do komunikacji z interfejsem systemu operacyjnego). Dzięki temu drugi system może zostać zamieniony lub zmieniony bez wpływania na warstwę komunikacyjną lub zmiany jej w systemie.

EDYCJA: Zapomniałem wspomnieć, że Most pozwala również obu stronom na most, aby ewoluowały i zmieniały się niezależnie, nie wpływając na inne. Dzieje się tak dlatego, że Most izoluje obie strony od siebie.

+0

Czy to prawda, że ​​wzorzec mostu używa DI dla instancji Implementora? – Warlock

+0

@Warlock tak Powiedziałbym to. DI to pojęcie, a nie wzór projektu sam w sobie. Nie ma w nim nic takiego jak wzór. DI jest używany od wieków jeszcze przed opublikowaniem książki GoF. Powiedziałbym więc, że jest to wskazówka do pisania luźno powiązanego kodu niż wzorzec projektu. –

+1

@Warlock można użyć DI dla każdej strony implementacji implementacji Bridge, ale nie jest to wymagane. – dkatzel

Powiązane problemy