在Design Patterns - Elements of Reusable Object-Oriented Software一书中说:
在只有一个实现(一对一)的情况下,不需要创建抽象实现类。这是桥接模式的退化案例;Abstraction 和 Implementor 之间存在一对一的关系。尽管如此,当类的实现更改不得影响其现有客户时,这种分离仍然很有用——也就是说,它们不必重新编译,只需重新链接即可。
我怀疑编译时间的好处,因为我无法想象在 Java 中实现更改会重新编译其超类(在这种情况下是抽象的)的情况。
例如,如果我们有 X 扩展 Y 并且客户这样做:
Y y = new X();
X 的改变并不意味着 Y 的重新编译(当然,如果我们不想改变 X 的方法签名)
使用桥接模式时完全相同:
YAbstraction yabstraction = new YRefinedAbstraction(new XImplementor());
XImplementor 的变化并不意味着重新编译 YAbstraction。
因此,根据我的说法,这种好处不会出现在 Java 中,并且对于一对一 => 不需要桥接模式。
也许子类的变化会迫使超类用其他语言重新编译?喜欢 SmallTalk 和 C++ 吗?
你有什么意见?