私はこれらの線に沿った何かを扱っています:
非常に複雑なクラスと、クラスの初期化時に設定されない、または外出先で設定されるものに依存するメンバーがあります。そのクラスのオブジェクトは、そのメンバーが設定されていない場合でも意味があります。他のメンバーに加えられた他の変更に応じてリセットすることもできます。
ここで、この「特別な」メンバーの設定には計算コストがかかると想定します。そのため、要求に応じて計算を遅らせています。
それで:
class Class
{
X x;
Y y;
SpecialClass specialObject;
public:
void setX(const X& newX);
void setY(const Y& newY);
//----
SpecialClass getSpecialObject() /*const*/
{
computeSpecialObject();
return specialObject();
}
private:
void computeSpecialObject()
{
//specialObject depends on x and y
//and is expensive to compute
//this method is a bottleneck
}
};
compute変更するたびに、xまたはコストがかかるため、メソッドを呼び出したくないyので、ジレンマが残ります。
const?を削除します 論理的には、ゲッターはである必要がありますconstが、そうではありません。オブジェクトでは呼び出せないという欠点もありconstます。- 私は作ることができますが
specialObjectmutable、それは正しいことではないようです。 - 恒常性を捨てる?繰り返しますが、魚のように見えます。
- 取得する前に電話
computeSpecialObjectしますか?-誰かが忘れたらどうしますか?彼らは時代遅れの結果を得るでしょう。
これに対応するデザインパターンはありますか?良いアプローチ?それとも、クラスのデザインが間違っているのでしょうか。(私はこの最後のものに傾倒しますが、クラスを変更することは実際にはオプションではありません)
注:私はメンバーを作成しましたmutable。より良い解決策があるかどうか知りたいです。