我刚刚了解了Bridge
Pattern 及其意图:将抽象与其实现分离,以便两者可以独立变化。
但是为什么不能AbstractFactory
做同样的事情呢?
我知道 anAbstractFactory
可以创建一个特定的桥梁,但我的问题涉及使用AbstractFactory
来Bridge
解耦抽象和实现。
你能解释一下AbstractFactory
和Bridge
Pattern之间的真正区别吗?
我刚刚了解了Bridge
Pattern 及其意图:将抽象与其实现分离,以便两者可以独立变化。
但是为什么不能AbstractFactory
做同样的事情呢?
我知道 anAbstractFactory
可以创建一个特定的桥梁,但我的问题涉及使用AbstractFactory
来Bridge
解耦抽象和实现。
你能解释一下AbstractFactory
和Bridge
Pattern之间的真正区别吗?
首先,从我所读到的内容中,桥接模式更多地适用于课程及其所做的事情经常变化的情况。可以将类本身视为实现,将类的行为视为抽象。
另一方面,抽象工厂提供了一个接口,用于创建相关或依赖对象组,而无需指定它们的具体类;他们的实施问题。
所以我想总结一下,你是在比较苹果和橙子,也许这就是混乱的来源。它们用于解决不同的问题。
对我来说,操作意味着java中的方法,所以操作是由抽象定义或声明的,但在类本身中实现。所以是的,抽象只是声明操作可以做的行为,但实际的实现是在类中完成的。此外,抽象工厂也是正确的。
我想桥接的定义部分是它可以有一组抽象,这些抽象与一个抽象不同。
设计模式使用抽象一词来指代依赖于一组抽象操作的类,其中该组抽象操作的多个实现是可能的。
有关更多信息,请参阅这些链接:
几乎没有区别,我们无法比较它们。
抽象工厂是创建型设计模式,它处理对象的创建。Bridge是结构设计模式,它处理类的结构和组合。
在Bridge中,抽象和实现将独立变化。但是在抽象工厂中,如果你改变抽象(接口),你必须改变客户端。
abstract_factory模式用例:
清单:
桥梁模式:
在以下情况下使用它:
相关的 SE 问题:
是的。它们是相似的。AF 用于创建对象系列。而 Bridge 更多的是关于行为,并且还允许算法和平台之间的松散耦合。
eg:假设我们开发了一个使用Ping和Traceroute进行网络诊断的程序,不同平台的命令是不同的。抽象工厂可用于获取任何平台的 ping 或 traceroute 实例。它并没有就此结束。Bridge 允许我们使用 AF 返回的那些 ping 和 trace 命令开发更高级别的算法。根据平台的不同,可以使用不同序列的 ping 和 traceroute 的算法可以使用桥接模式从平台特定的实现细节中抽象出来。