我正在使用带有一堆类的第三方程序集,以分层方式组织。CreateXxx()
它们具有私有构造函数,并通过在另一个更高级别的类的实例上调用方法来实例化。在层次结构的顶部,使用了一个单例类。例如,应用程序代码如下所示:
TopClass top = TopClass.GetInstance();
SecondLevelClass secondLevel = top.CreateSecondLevelElement();
ThirdLevelClass thirdLevel = secondLevel.CreateThirdLevelElement();
类似地,终结是使用一种DeleteXxx()
方法完成的,该方法必须发生在用于CreateXxx()
.
我不会详细说明采用这种特殊方法的原因。但是,我想用我自己的一组具有公共构造函数的类来封装这些类的创建,这样代码看起来会更好,如下所示:
// No TopClass anymore, see explanation below
MySecondLevelClass secondLevel = new MySecondLevelClass();
MyThirdLevelClass thirdLevel = new MyThirdLevelClass(secondLevel);
我最初的方法是让MyXxx
类在构造函数中调用相关CreateXxx()
方法并维护对结果的引用。此外,需要对构造函数参数的引用才能DeleteXxx()
在完成时调用方法。为此,我正在考虑在内部实现IDisposable
和调用。DeleteXxx()
Dispose()
使用这种方法,TopClass
对于应用程序开发人员来说就变得多余了,因为它的唯一目的是创建和销毁 SecondLevelClass 实例。这现在发生在MySecondLevelClass
构造函数的内部。
总而言之,我认为这在技术上是合理的。我遇到的唯一问题是原始类实现了具有很多方法的接口,我仍然希望通过我的MyXxx
类公开这些方法。我不期待在我自己的类上重新定义所有这些方法,只是将所有调用转发到对“原始”类实例的封装引用。如果我能做一些像重载点运算符这样的事情会很好。或者,最好告诉编译器对原始类实例的封装引用实际上实现了接口——有点像在 VMT 中添加了一个额外的间接。
当然不支持这些选项,我还没有找到解决所有方法重复的方法。有没有人知道如何以更聪明的方式做到这一点?任何反馈表示赞赏,在此先感谢。