2011-10-09 68 views
10

我刚刚了解到Bridge模式及其意图:将抽象与其实现分离,以使两者可以独立变化AbstractFactory与桥接模式

但为什么不能只是AbstractFactory做同样的事情?

我知道一个AbstractFactory可以创建一个特定的桥,但我的问题涉及到的AbstractFactory代替Bridge使用去耦抽象和实现。

请您解释一下AbstractFactoryBridge模式的真正区别吗?

回答

4

首先,我读过的桥梁模式更多的是当班级和班级经常变化。类本身可以被看作是抽象的实现和类的行为。

另一方面,抽象工厂提供了一个用于创建相关或依赖对象组的接口,而不指定它们的具体类;他们的实施担忧。

所以我想总结一下,你在比较苹果和橙子,也许这就是混淆来自何处。他们是为了解决不同的问题。

对我来说操作意味着java中的方法,所以操作是由抽象定义或声明的,但是在类中实现。因此,抽象只是声明操作可以做到的行为,但实际的实现是在类中完成的。此外,抽象工厂也是正确的。

我想桥梁的定义部分是它可能有一组抽象与一个抽象不同。

设计模式使用抽象一词来指代一个依赖抽象操作集合的类,其中抽象操作集合的几个实现是可能的。

更多信息请参见以下链接:

Using Abstractions and the Bridge Pattern in Java

Wikipedia: Bridge_Pattern

Bridge Pattern in Java

The Bridge Pattern Design Pattern

+1

感谢您的解释。告诉我,我们是对的:在Bridge中,所有原始操作都应该由实现者来实现,而不是抽象本身。另一方面,对于AbstractFactory,它的意图只是创建对象(例如包含在Bridge模式的抽象方面的对象),但是这种模式从来不期望所有的基本操作都必须在抽象方面实现。因此无法使用对于所有基本操作,始终委派类似objectCreatedByFactory.doSomething() – Mik378

1

是。他们是相似的。 AF用于创建对象的家族。 Bridge更多的是关于行为,还允许算法和平台之间的松散耦合。

例如:假设我们使用Ping和Traceroute开发网络诊断程序,不同平台上的命令是不同的。抽象工厂可用于为任何平台获取ping或traceroute的实例。 它并没有在那里结束。 Bridge允许我们使用AF返回的ping和trace命令开发更高级的算法。根据平台,可以使用ping和traceroute的不同序列的算法可以使用桥接模式从平台特定的实现细节中抽象出来。

1

有一些差异,我们不能比较两者。

  1. 抽象工厂造物设计模式,这与创建对象的交易。 结构设计图案,其与类结构和组合物,涉及。

  2. ,抽象和实现将独立变化。但在抽象工厂中,如果更改抽象(接口),则必须更改客户端。

abstract_factory模式使用案例:

  1. 当你的系统有能力创造的产品的多个家庭或你想提供的产品出库没有暴露的实现细节。

清单:

  1. 决定是否“平台无关性”和创建服务是痛苦的电流源。
  2. 绘制出“平台”与“产品”的矩阵。
  3. 定义一个由每个产品的工厂方法组成的工厂界面。
  4. 为每个平台定义一个工厂派生类,它封装了对新操作符的所有引用。
  5. 客户端应将所有对新引用的引用废弃,并使用工厂方法创建产品对象。

bridge模式:

使用它的时候:

  1. 你想运行的执行时间的结合,
  2. 你有一个类的增殖从联接的界面和众多的实现,
  3. 要共享多个对象中的实现,
  4. 你需要马p正交类层次结构。

相关SE问题:

Does the Bridge Pattern decouples an abstraction from implementation?

What is the basic difference between the Factory and Abstract Factory Patterns?

看一看这个journaldev文章和sourcemaking文章深入各种设计模式的理解。