解决方法
一种可能的设计,它将在抽象类上使用私有构造函数:
- public abstract class BaseClass
- {
- private BaseClass(Object param)
- {
- //Do something with parameters
- }
- //Provide varIoUs methods that descendant classes will know how to perform
- public static BaseClass FromObject(Object value)
- {
- //Based on object,choose which type of derived class to construct...
- }
- private class HiddenDerivedA : BaseClass
- {
- public HiddenDerivedA(Object value)
- : base(value)
- {
- }
- }
- private class HiddenDerivedB : BaseClass
- {
- public HiddenDerivedB(Object value)
- : base(value)
- {
- }
- }
- }
如果派生的实现与用于构造它们的选择逻辑紧密耦合,并且您希望提供与其余代码的高度绝缘,则此模式非常有用.它使您免除了除了您明确指定的那些之外必须支持其他继承者的责任,并允许您将所有私有状态从基类公开到派生类.