2013-08-30 106 views
6

橋樑模式與依賴注入有什麼區別?橋樑模式與依賴注入

對於這兩種模式,我們有一個抽象類與另一個抽象的實現。下面是Bridge Pattern UML圖。

enter image description here

+2

我不同意那些聲稱DI不是設計模式的人。很少人會認爲MVC不是一種設計模式,它也有多種實現模式。 –

回答

6

AFAIK依賴注入不是一種設計模式但在SOLID principles定義的設計方針

所以Bridge模式使用依賴注入在它達到所需的多態行爲,其中DrawingAPI在構造函數中被注入從具體實施API的解耦Shape

段從Bridge Pattern of Wikipedia

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

Bridge模式的例子 - 設計模式

依賴注入 - 設計準則或原則

+1

我同意你說的,但是當我從Wiki中讀取定義時,它說「依賴注入是一種實現軟件庫控制反轉的軟件設計模式」,所以你認爲術語「設計模式」是錯誤的或者它是正確的一種觀點? – fmchan

+0

@fmchan恕我直言,依賴注入是一種原則而不是設計模式。它構成了許多GoF設計模式的核心,也是SOLID的基本原理之一。 –

4

您可以通過幾種機制做的依賴注入。橋樑機制只是其中之一。簡單的界面實現是另一個。類織造和其他動態技巧又一個。

依賴注入是一種開發/設計技術,但不是一種模式,因爲它可以通過多種方式實現。

想一想更多關於此的信息,您可以考慮依賴注入軟件體系結構模式(但仍不是設計),這是解決一系列架構問題(可測試性,可配置性,模塊化等)。

換句話說,依賴注入可以有效地被視爲一個模式,但在不同的層次上:架構,而不是設計。

1

橋接模式使用Dependency Inversion使網橋工作,即抽象基類/接口取決於實現者接口。

依賴注入是依賴倒置原理最常用的實現。

3

許多設計模式都有類似的UML圖。

橋樑模式與依賴注入完全不同。

Dependency Injection - 在運行時或編譯時輕鬆插入(和交換)代碼中的依賴關係的一種方法。

Bridge Pattern - 一種在不同系統之間增加額外接口的方法。 Bridge是你的代碼和其他系統之間的通信層。例如,Java中最常用的兩種Bridge Pattern實現是JDBC(它通過Driver Bridge與數據庫通信)和Swing(使用Bridge與操作系統的UI進行通信)。這樣可以讓其他系統換出或更改,而不會影響或更改通信層到系統。

編輯:忘了提及一座橋還允許橋上的雙方獨立進化和改變,而不會影響另一方。這是因爲橋將兩側隔離開來。

+0

說Bridge模式使用DI作爲Implementor實例是否正確? – Warlock

+0

@Warlock是的,我會這麼說。 DI本身就是一個概念而不是設計模式。沒有什麼像它的模式。 DI甚至在GoF書出版之前就已經被使用了。所以我認爲這是編寫鬆散耦合代碼的指南,而不是設計模式。 –

+1

@Warlock您可以在Bridge實例的任一側使用DI,但不是必需的。 – dkatzel