在提供不适合派生的公共API类时,我发现通过派生它们而不是添加和实现桥接来实现它们更方便。
抽象的实现不一定是可替换的。唯一的要求是将实现与抽象(公共接口)分开。
PublicApiAssembly.dll:
public abstract class PublicApi // Clients don't need to derive from it
{
internal PublicApi() {}
public abstract void Calculate();
}
ImplementationAssembly.dll(引用PublicApiAssembly.dll和所有其他依赖项来实现抽象):
internal class PublicApiImpl : PublicApi
{
public override void Calculate() {}
}
这仍然是实现源于抽象的桥接模式吗?
Wikipedia让我觉得这是桥接模式的一种实现,当说“可以使用继承来分离责任”。
谢谢!
答案 0 :(得分:1)
桥接模式的要点是“将抽象与其实现分离,以便两者可以独立地变化 ”。 抽象可以通过继承而变化,而实现可以根据不同的实现而变化。您的设计不再适用。您有意地决定抽象不会变化(“不适用于派生的公共API类”)并通过继承将实现绑定到抽象。所以恕我直言,这里没有留下足够的桥梁模式来证明它的合理性。
作为旁注:
唯一的要求是将实现与抽象(公共接口)分开。
您将PublicApi
建模为抽象类而不是接口的原因是什么?根据我从您的问题中读到的内容,界面将更符合您的意图。