我刚刚了解到Bridge
模式及其意图:将抽象与其实现分离,以使两者可以独立变化。AbstractFactory与桥接模式
但为什么不能只是AbstractFactory
做同样的事情?
我知道一个AbstractFactory
可以创建一个特定的桥,但我的问题涉及到的AbstractFactory
代替Bridge
使用去耦抽象和实现。
请您解释一下AbstractFactory
和Bridge
模式的真正区别吗?
我刚刚了解到Bridge
模式及其意图:将抽象与其实现分离,以使两者可以独立变化。AbstractFactory与桥接模式
但为什么不能只是AbstractFactory
做同样的事情?
我知道一个AbstractFactory
可以创建一个特定的桥,但我的问题涉及到的AbstractFactory
代替Bridge
使用去耦抽象和实现。
请您解释一下AbstractFactory
和Bridge
模式的真正区别吗?
首先,我读过的桥梁模式更多的是当班级和班级经常变化。类本身可以被看作是抽象的实现和类的行为。
另一方面,抽象工厂提供了一个用于创建相关或依赖对象组的接口,而不指定它们的具体类;他们的实施担忧。
所以我想总结一下,你在比较苹果和橙子,也许这就是混淆来自何处。他们是为了解决不同的问题。
对我来说操作意味着java中的方法,所以操作是由抽象定义或声明的,但是在类中实现。因此,抽象只是声明操作可以做到的行为,但实际的实现是在类中完成的。此外,抽象工厂也是正确的。
我想桥梁的定义部分是它可能有一组抽象与一个抽象不同。
设计模式使用抽象一词来指代一个依赖抽象操作集合的类,其中抽象操作集合的几个实现是可能的。
更多信息请参见以下链接:
是。他们是相似的。 AF用于创建对象的家族。 Bridge更多的是关于行为,还允许算法和平台之间的松散耦合。
例如:假设我们使用Ping和Traceroute开发网络诊断程序,不同平台上的命令是不同的。抽象工厂可用于为任何平台获取ping或traceroute的实例。 它并没有在那里结束。 Bridge允许我们使用AF返回的ping和trace命令开发更高级的算法。根据平台,可以使用ping和traceroute的不同序列的算法可以使用桥接模式从平台特定的实现细节中抽象出来。
有一些差异,我们不能比较两者。
抽象工厂是造物设计模式,这与创建对象的交易。 桥是结构设计图案,其与类结构和组合物,涉及。
在桥,抽象和实现将独立变化。但在抽象工厂中,如果更改抽象(接口),则必须更改客户端。
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文章深入各种设计模式的理解。
感谢您的解释。告诉我,我们是对的:在Bridge中,所有原始操作都应该由实现者来实现,而不是抽象本身。另一方面,对于AbstractFactory,它的意图只是创建对象(例如包含在Bridge模式的抽象方面的对象),但是这种模式从来不期望所有的基本操作都必须在抽象方面实现。因此无法使用对于所有基本操作,始终委派类似objectCreatedByFactory.doSomething() – Mik378