当交付不用于派生的公共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() {}
}
这仍然是实现源自抽象的桥接模式吗?
维基百科让我认为这是一种桥模式的实现,当时说"可以使用继承来分离责任"。
谢谢!
桥接模式的要点是"将抽象与其实现解耦,以便两者可以独立地变化"。抽象可以因继承而变化,而实现则可以因不同的实现而变化。你的设计不再是这样了。您故意决定抽象不会变化("不用于派生的公共API类"),并通过继承将实现与抽象联系起来。所以IMHO这里没有留下足够的桥接模式来证明引用它的合理性
附带说明:
唯一的要求是将实现与抽象(公共接口)分离。
为什么要将PublicApi
建模为抽象类而不是接口?根据我从你的问题中读到的内容,界面将更符合你的意图。