【发布时间】:2010-03-25 13:30:22
【问题描述】:
来自 C++ 背景,我习惯于多重继承。我喜欢霰弹枪直接对准我的脚的感觉。现在,我更多地在 C# 和 Java 中工作,你只能继承一个基类,但可以实现任意数量的接口(我理解的术语对吗?)。
例如,让我们考虑两个实现公共接口但不同(但需要)基类的类:
public class TypeA : CustomButtonUserControl, IMagician
{
public void DoMagic()
{
// ...
}
}
public class TypeB : CustomTextUserControl, IMagician
{
public void DoMagic()
{
// ...
}
}
两个类都是UserControls,所以我不能替换基类。两者都需要实现DoMagic 函数。我现在的问题是该函数的两个实现是相同的。而且我讨厌复制粘贴代码。
(可能的)解决方案:
- 我自然希望
TypeA和TypeB共享一个公共基类,在那里我可以只编写一次相同的函数定义。但是,由于只有一个基类的限制,我无法在层次结构中找到合适的位置。 - 也可以尝试实现一种composite pattern。将
DoMagic函数放在一个单独的辅助类中,但这里的函数需要(并修改)相当多的内部变量/字段。将它们全部作为(参考)参数发送看起来很糟糕。 - 我的直觉告诉我adapter pattern 可以在这里占有一席之地,必要时可以在两者之间转换的某个类。但它也让人感觉很老套。
我将其标记为与语言无关,因为它适用于所有使用这种单基类多接口方法的语言。
另外,如果我似乎误解了我命名的任何模式,请指出。
在 C++ 中,我只需创建一个带有私有字段的类,即函数实现并将其放入继承列表中。 C#/Java 之类的正确方法是什么?
【问题讨论】:
标签: language-agnostic design-patterns oop