我刚学会了Bridge
模式及其意图:将抽象与其实现分离,以便两者可以独立变化。
但为什么AbstractFactory
只能做同样的事情?
我知道AbstractFactory
可以创建特定的桥接,但我的问题是使用AbstractFactory
代替Bridge
来解除抽象和实现。
您能否解释一下AbstractFactory
和Bridge
模式之间的真正区别?
答案 0 :(得分:4)
首先,我所阅读的桥梁模式更多的是当课程和它的作用经常变化时。类本身可以被视为实现和类的行为作为抽象。
另一方面,抽象工厂提供了一个界面,用于创建相关或从属对象组,而不指定其具体类;他们的实施问题。
所以我想总结一下,你将苹果与橙子进行比较,也许这就是混乱的来源。它们用于解决不同的问题。
对我来说操作意味着java中的方法,因此操作是由抽象定义或声明的,但是在类本身中实现。所以是的,抽象只是声明操作在行为方面可以做什么,但实际的实现是在类中完成的。此外,抽象工厂也是正确的。
我猜桥的定义部分是它可以有一组抽象,而不是一个抽象。
设计模式使用“抽象”一词来指代依赖于一组抽象操作的类,其中抽象操作集的几个实现是可能的。
有关详细信息,请参阅以下链接:
答案 1 :(得分:1)
是。它们很相似。 AF用于创建对象族。其中Bridge更多地是关于行为,也允许算法和平台之间的松散耦合。
例如:假设我们使用Ping和Traceroute开发网络诊断程序,不同平台上的命令是不同的。抽象工厂可用于获取任何平台的ping或traceroute实例。 它并没有就此结束。 Bridge允许我们使用AF返回的ping和trace命令开发更高级别的算法。根据平台,可以使用不同的ping和traceroute序列的算法可以使用桥接模式从平台特定的实现细节中抽象出来。
答案 2 :(得分:1)
差异很小,我们无法比较它们。
抽象工厂是创建设计模式,它处理对象创建。 Bridge 是结构设计模式,它处理类结构和组合。
在 Bridge 中,抽象和实现会有所不同。但是在抽象工厂中,如果你改变抽象(接口),你必须改变客户端。
abstract_factory模式用例:
清单:
bridge模式:
在以下情况下使用它:
相关的SE问题:
Does the Bridge Pattern decouples an abstraction from implementation?
What is the basic difference between the Factory and Abstract Factory Patterns?
请查看此journaldev 文章和sourcemaking 文章,以深入了解各种设计模式。