お世話になります。
デザインパターンに関する質問になります。Strategyパターンと、もしかするとCommandパターンが関係します。
題材
実際の課題は業務に関わって書けないため、例として最適な睡眠時間を計算するアルゴリズムの実装を考えさせてください。
- 最適な睡眠時間を計算するアルゴリズムは色々とバリエーションが考えられます。
- なのでStrategyパターンでインターフェースを切っておくことにします。
cpp
1struct SleepTimeCalcParam { 2 double average_sleep_time; // 普段の平均睡眠時間 3}; 4 5class SleepTimeStrategy { 6public: 7 virtual double calcSleepTime(const SleepTimeCalcParam& param) = 0; 8};
ここで、最初に考えたアルゴリズムが「普段の平均睡眠時間」を参考に最適睡眠時間を計算するアルゴだったため、
パラメタに double avarage_sleep_time
を入れておきました。
問題
ここで、新しいアルゴリズムとして、「日中に運動をしたか否か」をアルゴリズム内で考慮したいとします。
安直に考えれば、struct SleepTimeCalcParam
にbool exercise_done
などを追加することになります。
しかしながら、アルゴリズムを変更するたびにインターフェースを変更することはしたくありません!
なのでアルゴリズムの引数ないしパラメタをうまく隠蔽?出来ないか、と考えています。
そのようなことは可能なデザインパターンや技法は存在するでしょうか。
Commandパターンを使うとできるのかな?と思って調べているのですが、いまいち分かっておりません。
いつもお世話になりますが、アドバイスいただけますと幸いです。よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/20 03:06