在处理对象层次结构的特定设计时,我想出了一个情况,并构建了一个有效的设计,但它的使用模式非常混乱,我想检查是否有人看过这种模式以前和是否有任何文献:
所以想象你有一个动物的Heirarchy:
class Animal
class Mammal : Animal
class Dolphin : Mammal
现在假设我们有一个界面:
interface IMating<T>
{
MateWith(T otherAnimal);
}
在这种情况下,我使用泛型强类型MateWith
方法。我可以使用对象并进行一些可能不安全的转换,但我选择强力输入内容。
鉴于这个界面,我理想的是:
class Animal : IMating<Animal>
{
}
class Mammal : Animal, IMating<Mammal>
{
}
class Dolphin : Mammal, IMating<Dolphin>
{
}
这样做允许派生的IMating.MateWith
方法通过使用这些类的基本版本来扩展它的父项行为。当然这意味着如果我使用Dolphin
的实例,我会在Dolphin
上使用以下方法登陆:
Dolphin.MateWith(Animal a);
Dolphin.MateWith(Mammal m);
Dolphin.MateWith(Dolphin d);
显然,我只想要该列表中的最后一个方法,并且我希望其他方法不被访问,只是用完了基链(动物和哺乳动物在我的情况下并不是抽象的,可以实例化)。一种替代方案是利用组合物从而抽象出内部基础&#34;正在使用的课程。
由于这更像是一个有助于继承的层次结构,我使用通用约束解决了我的问题如下(带有一些副作用):
class Animal<T> : IMating<T>
where T : Animal
{
}
class Mammal<T> : Animal<T>
where T : Mammal
{
}
class Dolphin<T> : Mammal<T>
where T : Dolphin
{
}
基本上我将每个类都设置为层次结构通用,但是在最小值时,类型参数必须至少是类本身的类型或该类的任何派生版本。
大部分模式解决了我想要实现的目标,但我想知道这种模式是否在其他任何地方使用,以及为什么?它在某处记录了吗?它是众所周知的吗?
提前感谢任何帮助/指针