2013-08-30 109 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