ベストプラクティスでは、新しいメソッドを保護対象として設定し、代わりに静的な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()));
}
それで、私はより良い解決策があるかどうか疑問に思っています、そしてそうでなければ、これらの中で何が最善でしょうか?