最佳实践建议将新方法设置为受保护,并改用静态新... 方法来减轻方法重载的不足。所以我使用这里
解释的这种模式
但是静态方法不是继承的。所以我们必须为每个子类定义静态构造和静态 new... 方法。
因此,我们失去了继承的一些好处。
我查看了系统类,希望找到更好的解决方案,但我所看到的并没有真正帮助我:
-有些尊重静态新模式并在子类中声明方法
-有些只是使用实例 new 而没有保护它
-有些将母类用作“类工厂”,例如 SalesFormLetter
static SalesFormLetter construct(DocumentStatus document,
boolean getParmId = true)
{
switch(document)
{
case DocumentStatus::Confirmation : return new SalesFormLetter_Confirm (getParmId);
case DocumentStatus::PickingList : return SalesFormLetter_PickingList::construct(getParmId);
case DocumentStatus::PackingSlip : return new SalesFormLetter_PackingSlip (getParmId);
case DocumentStatus::ProjectPackingSlip : return new SalesFormLetter_PackingSlipProject(getParmId);
case DocumentStatus::Invoice : return new SalesFormLetter_Invoice (getParmId);
case DocumentStatus::ProjectInvoice : return new SalesFormLetter_InvoiceProject (getParmId);
default : throw error(strfmt("@SYS19306",funcname()));
}
throw error(strfmt("@SYS19306",funcname()));
}
所以我想知道是否有更好的解决方案,如果没有,其中最好的解决方案是什么?