Tu veux sans doute dire méthode de modèle de modèle.
Vous avez raison, ils servent très similaire besoins.
Je dirais qu'il est préférable d'utiliser un modèle de la méthode dans le cas où vous avez un "modèle" de l'algorithme ayant défini les étapes où les sous-classes de remplacer ces étapes pour modifier quelques détails.
En cas de stratégie, vous devez créer une interface, et au lieu de l'héritage que vous êtes à l'aide de la délégation. Je dirais que c'est un peu plus puissant motif, et peut-être mieux, conformément à DIP - inversion de dépendance principes. Il est plus puissant parce que vous de définir clairement une nouvelle abstraction de la stratégie - un moyen de faire quelque chose, qui ne s'applique pas au modèle de la méthode. Donc, si cette abstraction du sens - de l'utiliser. Cependant, en utilisant la méthode de modèle peut vous donner des modèles plus simple dans les cas simples, ce qui est également important.
Considérez les mots fit mieux: avez-vous un modèle d'algorithme? Ou est la chose que vous avez ici une abstraction de la stratégie - nouvelle manière de faire quelque chose
Exemple d'un modèle de méthode:
Application.main()
{
Init();
Run();
Done();
}
Ici, vous héritez de l'application et de remplacer exactement ce qui sera fait sur init, d'exécuter et de faire.
Exemple de stratégie:
array.sort (IComparer<T> comparer)
Ici, lors de l'écriture d'un comparateur, vous n'héritez pas à partir d'un tableau. Tableau des délégués de l'algorithme de comparaison d'un comparateur.