問題タブ [template-method-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
196 参照

java - テンプレートはクラス名のサフィックスとして何を意味しますか?

多くのプログラムでは、接尾辞 Template を持つ Class が存在します。たとえばorg.springframework.web.client.RestTemplate、 などです。

テンプレートはクラス名のサフィックスとして何を意味しますか? Template Methodパターンのことですか?

その理由を知っていますか?

良い一日を過ごしてください。

0 投票する
1 に答える
262 参照

java - テンプレート メソッド パターンを使用してロジックをロギングから分離する

このテンプレート メソッド パターンを、ログ記録および例外処理とは別のロジックに使用してもよいですか、それとも「悪い習慣」ですか?

たとえば、次のコードがあります。

そして私の子クラス:

doEat()メソッドとの異なる実装はありませんdoSleep()

それが価値があるかどうか、それが「悪い習慣」であるかどうかを知りたいです。

0 投票する
3 に答える
3037 参照

go - Golang でテンプレート メソッド パターンを実装するエレガントな方法

Goでテンプレートメソッドパターンを実装するエレガントな正規の方法はありますか? C++ では、これは次のようになります。

golangで私は次のようなものを書きました:

しかし、このコードは実行時のヌル ポインター エラーで失敗します。基本的な考え方は、派生クラス (go 構造体) から基本クラス ルーチンにいくつかの機能を組み合わせて、この mix-in 派生ルーチンから基本クラスの状態を利用できるようにすることです。

0 投票する
2 に答える
1836 参照

c++ - テンプレート化されたテンプレート メソッドの実装

注: 次の質問は、テンプレート メソッド デザイン パターンC++ 関数テンプレートに関するものです。両方を区別するために、デザイン パターンを参照するときは斜体を使用し、C++ テンプレートを参照するときは太字を使用します。

テンプレート メソッド パターンのアイデアは、アルゴリズムの一部を交換可能にすることです。これは通常、サブクラスが基本クラスのアルゴリズムにプラグインされる具体的な実装を提供する継承によって実現されます。ただし、フック メソッドをtemplatesにする必要がある場合、テンプレートを仮想にすることはできないため、これは機能しません。コンパイルされない簡単な例を次に示します。

関数テンプレートフックを使用するテンプレート メソッドを実装する方法はありますか?

Baseクラスをどこでも型として使用することに興味はありません。コンパイル時の最適化を最大限に実現するために、常に具象固有の型を使用します。したがって、この質問の別の定式化は次のとおりです。実装全体で共通のコード スケルトンを共有する関数テンプレートDerived-1 .. Derived-nを持つ複数のクラスを作成するにはどうすればよいでしょうか?

0 投票する
1 に答える
1195 参照

java - -Impl サフィックスは、Java のフック メソッドの正当な命名規則ですか?

私はいくつかの古いコードを調べていて、テンプレート メソッドの実装で次の命名規則を見つけました。

フック メソッドの名前は、 acceptImpl()ではなく、doAccept ()またはacceptHook()になると思います。

「-Impl」サフィックスはフックメソッドに実際に使用されていますか? または紛らわしい命名慣行ですか?

0 投票する
0 に答える
34 参照

c# - C# で基底クラスのコンストラクターを呼び出す前にデータをフォーマットできません

TemplateFilterクラスを継承するすべてのサブクラス間で異なる動作を処理するために、C# で Template Method パターンを実装しようとしています。

サブクラスの 1 つは次のとおりです。

最後に、クラスOperand :

私の問題は、setValues を statc にする必要があるため、TemplateFilterからOperandコンストラクターを呼び出すことができないことです。一方、setValues を static に設定すると、メソッドformatResultTemplateFilter.setValuesから呼び出すことができず、目的の動作を実装する責任をサブクラスに任せることができません。では、アーキテクチャを変更せずにこのメカニズムを実装するにはどうすればよいでしょうか?

0 投票する
1 に答える
359 参照

java - 空のメソッドはテンプレート メソッド パターンの構造を壊しますか?

テンプレートメソッドパターンには、抽象的に定義されたスーパークラスがあります。そして、このクラスを拡張する具体的なクラスがあります。

テンプレート メソッドに新しい関数を追加し、一部のサブクラスでオーバーライドするとします (一部のクラスで使用する場合のみ)。他のクラスでは、この新しいメソッドを空 (関数には本体がありません) としてオーバーライドします。

この操作はコードの重複としてカウントされますか?

ここに画像の説明を入力

たとえば、テンプレート メソッドには新しい関数 doA() があります (doA() をフック メソッドとして使用することにしました)。この関数は、Class1 と doZ() と doY() の間でのみ使用したいと考えています。

この関数をテンプレート メソッドに追加し、この関数を Class2 empty でオーバーライドするとします。これはコードの重複と見なされますか?

0 投票する
1 に答える
1387 参照

design-patterns - テンプレートメソッドとストラテジーを併用する

ギャング・オブ・フォーは、テンプレート法戦略の違いを次のようにまとめています。

テンプレート メソッドは、継承を使用してアルゴリズムの一部を変更します。戦略では、委任を使用してアルゴリズム全体を変更します。

2 つのデザインを組み合わせることが正当化されるシナリオと、それらの関係がどのように見えるか?

些細な例では、テンプレート メソッドのフック メソッド内で戦略に委譲することが含まれますが、そのような設計を正当化する正当な理由は思いつきません。さらに、サブクラスに委譲する代わりに、Strategy に直接委譲することもできます。しかし、継承がなければ、テンプレート メソッドについて話すことはできません。