ベストアンサー
私も ltd********さん と同じ認識。 Strategy は、各ConcreteStrategyクラスが 「全部をごっそり差し替え」 できます。 通常 Strategy は interface で、実装を持ちません。 各ConcreteStrategyは、interfaceメソッド全部を実装する 必要があります。 Template Method の方は、そうじゃないです。 典型的には、アルゴリズムの 手順 は1パターン固定だけど、 手順中の 一部ステップ部分 だけを ConcreteClass が実装する というかんじ。 その他の 共通部分 は、AbstractClass 一カ所に 実装できます。 どっちがいい悪いじゃなくて、TPOに応じて使い分けだと思う。 一部だけをカスタムしたい場合は、TemplateMethodが向いてる。 共有部分は1クラスに集約実装できるんで、重複実装が発生しません。 けれど、実装を含む継承 は、最も密なクラス間結合なんで、 AbstractClass と ConcreteClass の関係は密で、AbstractClass 設計変更時は、全ConcreteClass群に影響が及びます。
2人がナイス!しています