ID非公開

2021/1/12 1:18

44回答

デザインパターンが詳しい方に質問です。 テンプレートメソッドとストラテジーの違いが全くわかりません。

C言語関連 | Java17閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

2

2人がナイス!しています

その他の回答(3件)

1

サンプルコードを実際に動かしてみるとよく分かるのではと思います。

1人がナイス!しています

0

デザインパターン自体が四半世紀前のオブジェクト指向黎明期にSmalltalkという言語を前提としてまとめられたものだからさ、異なるパターンも同じような実装になってしまう言語も多いんだよね。 テンプレートの方はJavaやC#ではジェネリクスとして言語仕様レベルで取り入れられている。実処理は個別に異なるが同じように扱えるようにするという発想ね。ストラテジーはアルゴリズム(処理の塊)自体を実行時に入れ替えることにより同じ処理を呼んでも実行される中身が違うって考え。C#ならデリゲートやMEFなどを使って実現できる。これらはいづれもポリモーフィズム(継承)を使っても実現することが出来て、その場合はほとんど同じような実装となる場合がある。 このあたりの事情が分かってくると「同じことを別の言い方している」のではなく「別の考え方が同じような実装になる」ということが理解できてくるのではないか。 所謂オブジェクト指向系の言語をいくつか勉強されるとこのあたりの事情が納得できるようになるかも。でもGoFのデザインパターンは流石に古すぎだよね。

ID非公開

質問者

2021/1/12 3:15

現実世界のアナロジーで考えるなら、 ・ストラテジー:委任立法制度 ・テンプレートメソッド:家電の電源ボタン みたいな感じで合ってますか?

2

Template Methodというのは、いくつかのアルゴリズムに共通な部分(テンプレート)を親クラスで実装しておき、差がある部分を子クラスで上書きするやり方。Strategyは、アルゴリズム全体をクラス化してごっそり入れ替えるやり方です。 それより、「同じことを別の言い方をする」ことを「朝三暮四」とは言いませんよ。

2人がナイス!しています