StateパターンとStrategyパターンの違いって?

会社でオブジェクト指向の勉強会をしたときのこと.
主任クラスや部長クラスが社員クラスを継承してる、みたいなモデリングがありましたとさ.


よく言われることですが、このモデリングだと主任から部長に昇格するようなことが
表現しづらいです.そこで社員クラスが役職クラスを持つようにして、主任職や部長職は
役職クラスを継承するように変形してみました.
まあ典型的なState/Strategyパターンですよね.


そんなときある人から、
  「これってStrategyパターンではなくてStateパターンですよね?」
と言われてちょっと焦りました.
いやー、正直そこまで考えてなかったです.


まあ話の流れからいえば、役職というのは一時的な状態なわけですから
Stateパターンであるといって問題ないと思います.
ただ一方で、Strategyパターンではないのか?と言われると
・・・うーん、微妙かも?


特にこのときは役職クラスに給与計算メソッドがあって
役職ごとに計算ロジックが異なる、と言う設定でした.
ここに着目した場合、例えば定期的に給与体系を見直すみたいな会社であれば、
給与ストラテジーを持つ、というモデリングの方が適している気がします.


もちろんその場合はクラス名とかを変える必要があるわけですが...
勉強会とかやると、いろいろと知識の再確認をさせられますね.