我有一个抽象类 AxisState
,有两个具体的子类 XState
和 YState
。它们应该是不可变对象,具有一堆返回不同 AxisState
的方法。这些方法中的大多数都在 AxisState
中完全定义,其中一些是抽象的并在具体的子类中实现。
问题是我需要以某种方式从 AxisState
中完全实现的方法中返回 AxisState
的当前具体子类型的新实例。
我目前正在做的是实现一个方法 abstract AxisState NewStateOfSameType()
,它被实现为分别从这些子类型中返回一个新的 XState
或 YState
。
public abstract class AxisState {
public abstract AxisState NewStateOfSameType(/*...*/);
public abstract AxisState OverloadMethod();
public abstract AxisState AnotherOverloadMethod();
public AxisState(int fieldOne, int fieldTwo) {
// ...
}
public AxisState NextState(/*...*/) {
// ...
return NewStateOfSameType(fieldOne, fieldTwo);
}
// ...
}
以及 XState
/YState
中的实现:
public class XState : AxisState {
public XState(int fieldOne, int fieldTwo) : base(fieldOne, fieldTwo) {}
public override AxisState NewStateOfSameType(int fieldOne, int fieldTwo) {
return new XState(fieldOne, fieldTwo);
}
// Abstract methods implemented here
}
public class YState : AxisState {
public YState(int fieldOne, int fieldTwo) : base(fieldOne, fieldTwo) {}
public override AxisState NewStateOfSameType(int fieldOne, int fieldTwo) {
return new YState(fieldOne, fieldTwo);
}
// Abstract methods implemented here
}
有没有更简洁的方法来处理这一切,或者有什么方法可以重组整个事情?