問題タブ [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 投票する
2 に答える
2145 参照

class - テンプレートメソッドパターンと抽象(基本)クラスの使用の違いは?

数時間 (再) 検索した後、通常の抽象クラスとテンプレート パターンの使用の説明可能な違いを思い付くことができません。

私が見る唯一のことは、抽象クラスを使用している間、すべてのメソッドを実装する必要があるということです。しかし、テンプレート メソッドを使用している間は、これらのいくつかの抽象メソッドを実装するだけです。

テンプレートパターンの(欠点?)利点と、テンプレートパターンと抽象クラスの主な違いを誰かに説明してもらえますか。

ps私は自分の理解/研究のためにこれをよりよく知りたいだけです

編集:迅速な対応ありがとうございます!しかし、もう少し詳しく説明します(すでに正しい方向に進んでいるため:))。私は抽象クラスが何であるかを知っています!(そして、どのメソッドを実装する必要があるのか​​?)、そしてテンプレート パターン (クラスで定義された手続き型アルゴリズムの一種のスケルトン?) の基本的な考え方を知っています。似てるからちょっと戸惑う!また、私は英語ではないので、何かを監督する可能性があります! 事前にTHNX

0 投票する
4 に答える
1128 参照

java - テンプレート方式と戦略設計パターンの類似点は何ですか

これは TemplateMethod パターンの例ですか??

もしそうなら、戦略パターンよりもこのパターンを使用する利点は何ですか??

戦略パターン

私が気づいたのは、TemplateMethod パターンとは異なり、Strategy パターンは変化するものをカプセル化して、サブクラス化されたものが変化するものを処理できるようにすることです。

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

c++ - テンプレートメソッドパターンと多重継承を組み合わせる方法は?

このコードを変更して機能させることはできますか?テンプレートメソッドパターンと多重継承を組み合わせることは可能ですか?さまざまなクラスにさまざまなアルゴリズムを実装すると非常に便利なようです。ありがとうございました。

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

c# - 基本クラスでのテンプレート メソッドの使用は何ですか?

さて、私はMSDN の「基本クラスの使用法」に関する優れた記事を読んでいまし。基本クラスとインターフェイスの概念は理解できますが、この記事の 2 番目の段落 (「保護されたメソッドとコンストラクター」) のテンプレート メソッドの使用法を理解できません。

簡単な実際の例を使って、この概念を理解するのを手伝ってくれる人はいますか? おそらく、テンプレート メソッドの概念を理解することから始めるのがよいでしょう。

前もって感謝します。

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

c# - C#でのテンプレートメソッドパターンの実装

テンプレートメソッドパターンは、抽象基本クラスにオーバーライドできないメソッドがあることを提供します。このメソッドは、共通のアルゴリズムを実装するため、サブクラスでオーバーライドしないでください。Javaでは、テンプレートメソッドはfinal抽象基本クラス内で宣言されます。C#では、sealedキーワードは同様の意味を持ちますが、オーバーライドされないメソッドは宣言できませんsealed

どうすればこの問題を解決できますか?メソッドが(C#の)サブクラスによってオーバーライドされるのを防ぐことができないのはなぜですか?

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

java - テンプレートメソッドには、子コンストラクターで宣言されたオブジェクトが必要です

子コンストラクターで取得された値が必要なため、そのコンストラクターで子クラスに挿入されたテンプレートメソッドを呼び出すマザークラスを拡張する子クラス。

親コンストラクターを変更せずに、このようなことを行うにはどうすればよいですか(Foo、ここ。実際のFooクラスでは変更できません)。

ここでは、フィールドにaValueを入力しても、aValueは作成されません。

どうすれば問題を解決できますか?

私はどんなパターン、ULM、解決策も探しています。

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

python - Pythonでのテンプレートメソッドの呼び出し順序

実行関数をユニットテストする最も簡単な方法は何でしょうか?ここでは、 fun *関数が何をするのかは興味がありませんが、呼び出しの順序が正しい場合に限ります。

ソリューションの唯一の要件は、テスト対象のクラスに対して邪魔にならないことです。

解決:

これは実際にはドラフトのようなものであり、この単純なクラスは、私がそれについて考えることさえ気にしないほど多くの方法で修正および拡張される可能性があります。重要なのは、テンプレートメソッド内のすべてのメソッドのすべての呼び出しを簡単に記録できるようになったことです。クラスによってモックされるべきではないオブジェクトのリスト(つまり、呼び出しを記録している関数)を指定することもできます。

@Damian Schenkelmanに特に感謝します。彼は、私にいくつかの重要な指針を与えてくれました。

これで、次のような方法で呼び出し順序をテストできます。

クラス名でメンバーを参照できます。

嘲笑されるべきではないすべてのメソッドを参加させるように注意してください。

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

c# - テンプレート メソッド パターン - 派生クラスでの直接メソッド呼び出しを防ぐ

テンプレート メソッドのパターンを正しく理解しているかどうかわかりません。

これが私の単純化された基本クラスの実装です。

私が理解している限り、基本クラスはアルゴリズムの流れを知っており、それを管理しています。問題は、実際のプロジェクトには多くの抽象メソッドがあり、派生クラスでそれらを直接呼び出すのを何らかの方法で防ぐことができればいいということです。複数のクラスがアルゴリズム フローを管理している場合は、読み取り不能です。

0 投票する
4 に答える
116 参照

c# - 派生クラスが呼び出すことができないが、クラスの消費者が呼び出すことができるメソッドを持つことは可能ですか?

テンプレートメソッドパターンを実装しています。クライアントがこのテンプレート メソッドで変更できる設定がいくつかあります。しかし、テンプレート メソッドの実装者がこれらの設定を変更するのを防ぎたいと思います。そのような場合、テンプレート メソッド (基本) クラスの不変条件を破ることができるからです。できればコンパイルに失敗してほしいです。(そうでなければ、戦略にリファクタリングする時が来ました:))

例:

1 つの方法は、戦略をリファクタリングして、次のようにすることです。

戦略にリファクタリングを適用せずにこの制約を示す言語機能があるかどうか興味があります。

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

c++ - 異なる署名を持つ関数にテンプレート メソッド パターンを適用する方法は?

同じように使用される一連の関数に統一されたインターフェイスを提供するにはどうすればよいでしょうか? 説明のために、与えられたライブラリ関数のセットを見てください:

同じように使用されると仮定します。

getSize()A) 提供する良い方法は何getValue()ですか?

最初に、テンプレート メソッド パターンが必要だと思いましたが、適用できませんでした。これは、テンプレート メソッド パターンのワーカーとは対照的に、関数のシグネチャが異なるためです。

だから私が代わりにしたこと:

B) これは良いアプローチですか?