这仍然是实现源于抽象的桥接模式吗?

时间:2014-09-14 18:19:36

标签: c# .net inheritance api-design bridge

在提供不适合派生的公共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让我觉得这是桥接模式的一种实现,当说“可以使用继承来分离责任”。

谢谢!

1 个答案:

答案 0 :(得分:1)

桥接模式的要点是“将抽象与其实现分离,以便两者可以独立地变化 ”。 抽象可以通过继承而变化,而实现可以根据不同的实现而变化。您的设计不再适用。您有意地决定抽象不会变化(“不适用于派生的公共API类”)并通过继承将实现绑定到抽象。所以恕我直言,这里没有留下足够的桥梁模式来证明它的合理性。

作为旁注:

  

唯一的要求是将实现与抽象(公共接口)分开。

您将PublicApi建模为抽象类而不是接口的原因是什么?根据我从您的问题中读到的内容,界面将更符合您的意图。