Donc, j'ai lu sur les méthodes de modèle sur Objective-C et j'essaie de comprendre ce qui est si spécial à leur sujet. De ma compréhension, toute méthode d'une classe de base peut être surédée et super peut être appelée? Ainsi est une méthode de modèle plus que quelque chose de plus que de remplacer une méthode dans la classe de base? P>
Si je me trompe, pouvez-vous expliquer ce qu'est un modèle de modement-méthode, et pouvez-vous fournir un exemple? P>
3 Réponses :
Oui, le modèle de modèle est un peu plus que de simplifier une méthode dans la classe de base.
Modèle de modèle peut être utilisé lorsqu'un plan d'un algorithme est défini concrètement, mais les étapes de l'algorithme sont laissées abstraites. Cela signifie que les étapes peuvent être mises en œuvre de différentes manières. Mais, le contour général de l'algorithme ne devrait pas changer. P>
Un exemple que je viens de créer à la volée: p> essentiellement, le La façon dont une journée devrait s'épuiser est concrètement définie dans la classe de la vie. Cependant, les détails du processus sont pris en charge par la sous-classe (c'est-à-dire GoodLife). La classe GoodLife mettra en œuvre des étapes très différemment qu'une classe de ruelle possible. p> Il y a quelques variations à ce motif; Par exemple, certaines des étapes peuvent également être définies concrètes. Dans l'exemple, l'EATLUNCH () peut être défini concrètement dans la classe de vie; Ce qui signifie que les sous-classes ne devraient pas changer ce comportement. p> Le motif a beaucoup de sens si vous avez un algorithme relativement complexe pouvant être mis en œuvre de différentes manières. P> Je manquai d'en quelque sorte la partie avec Objective-C dans ma réponse. Voici comment il ressemblerait à l'objectif-c: p> objectif-c n'a pas de support intégré pour les classes abstraites, donc j'ai travaillé autour d'elle en utilisant le NOTECOrecognousElector: code> méthode. Beaucoup plus de détails sur les classes abstraits et l'objectif - C peut être trouvé ici a>. p> p>
La question pose spécifiquement une mise en œuvre de l'objectif-C, mais vous avez utilisé ce qui ressemble à Java. Pouvez-vous fournir un bon équivalent objectif - C? Autant que je sache, il n'y a pas de mot clé abstrait ni une notion équivalente, dans l'objectif-c.
L'exemple de l'objectif-c a été ajouté; Merci pour l'avis.
DONTNOTECORECIENNISELLIZELORY: CODE> n'est pas une solution de contournement - c'est la bonne façon de faire des méthodes abstraites dans l'objectif-c. Obj-C est comme celui-ci à bien des égards; Qu'est-ce qu'une fonctionnalité de mots-clés du temps de compilation dans une langue est effectuée avec des idiomes d'exécution one-liner à obj-c.
De ma compréhension, n'importe quelle méthode dans une classe de base peut être excessive et super peut être appelée? Ainsi est une méthode de modèle plus que quelque chose de plus que de remplacer une méthode dans la classe de base? P> blockQuote>
Oui, il s'agit beaucoup plus que simplement remplacer une méthode de classe de base. Les méthodes de modèle sont un moyen de mettre en œuvre un algorithme dans lequel certaines étapes sont dépendantes de la sous-classe. Par exemple, envisagez une méthode de base qui a trois étapes majeures, F1, F2 et F3. Chaque étapes contient un certain nombre de déclarations. Ici F1 et F3 sont les mêmes dans toute la sous-classe, mais F2 dépend de la sous-classe. Alors quoi faire ici? Vous pouvez remplacer toute la méthode dans la sous-classe de copier des déclarations de F1 et F3, mais c'est un gaspillage. Donc, vous ne fournissez que F2 en sous-classe. Et dans ce cas, vous définissez l'algorithme (exécuteur F1, puis exécutez F2, puis exécutez F3) dans la classe de base, mais fournissez des crochets précis pour les sous-classes (F2). Notez que, la méthode de modèle en classe de base est définitive, la sous-classe ne peut donc pas changer l'algorithme, par exemple. Il ne peut pas changer l'ordre des F1, F2 et F3, aucune sous-classe ne peut omper les étapes F1, F3. P>
En bref, le modèle de méthodes de modèle ne concerne pas que le détriment, c'est l'utilisation de l'héritage pour gérer certaines situations spécifiques. Ce n'est pas spécifique OBJ-C et je ne peux rien vous fournir spécifique à l'OBJ-C. Pour obtenir une idée générale de ce modèle, je recommande les suivants: p>
- Livre des motifs de conception par gof li>
- Premiers modèles de conception li >
- Article Wikipedia sur la méthode de modèle LI> ol>
Et il y a aussi des tonnes de tutoriels / d'articles sur le Web. L'idée de base n'est pas dépendante de l'OBJ-C. P>
Je pensais que je devrais donner une réponse spécifique plus objective-C. Vous pouvez lire sur la méthode du modèle tel qu'utilisé dans Cocoa sur les pommes Pages de motifs de conception de cacao . Un exemple de ceci est le En fait, vous devriez probablement essayer de faire chaque méthode que vous souhaitez remplacer dans une sous-classe une méthode de modèle. Cela réduit le problème de savoir si vous devriez appeler la mise en œuvre de la classe de base lorsque vous remplacez et facilite le débogage. Vous pouvez simplement mettre un point d'arrêt dans la classe de base, au lieu de toutes les méthodes remplacées dans les sous-classes. p> Drawrect: code> Modèle de modèle. Comme d'autres méthodes de modèle, vous n'appelez jamais de méthodes de modèle directement vous-même. Il est appelé par setneedsdisplay code>. Ce point est de permettre au cadre d'optimiser le dessin. Si vous avez appelé Drawrect: code> directement vous-même, vous risquez de faire des redessins inutiles plusieurs fois. P>
Si vous entendez parler d'un modèle de conception et de penser: «Il n'y a pas grand chose à cela», vous avez surtout raison. Beaucoup d'entre eux sont évidents.