Head First design patterns - le modèle prototype et patron des visiteurs

prototype

Mode Prototype: Lorsque vous créez un processus classe donnée est très coûteux ou très complexe, sur l'utilisation du modèle prototype.

Nous jouons le jeu quand le jeu va créer dynamiquement étrange, mais quand d'étranges varie en fonction de différents scénarios créés par le héros lui-même va créer quelques disciples. Créer une grande variété d'instance de monstres, est devenu de plus en plus difficile, va mettre les détails des différents états, puis le constructeur, il ne semblait pas cohérent. Si vous pouvez encapsuler tous les détails des cas dans une seule zone, il est possible de créer un code qui gère les détails des monstres, découplées à partir du code réellement besoin de créer dynamiquement une instance, le programme deviendra assez propre.

Prototype modèle pour créer une nouvelle instance en copiant une instance existante, la méthode clone est généralement utilisé, ou désérialisation.

Conception diagramme de classes:

modèle prototype a trois rôles:

rôles Prototype : la duplication d' une méthode de définition d'instance existante génère une nouvelle instance (Monster).

Prototype des rôles spécifiques : mise en œuvre (WellKnowMonster, DynamicGeneratedMonster) pour générer une nouvelle instance de la copie d' une instance existante.

Rôles utilisateur : le maintien d' un registre, et de fournir une méthode pour trouver l'instance correcte du prototype. Enfin, il est prévu un procédé d'obtention nouvelle instance, la méthode utilisée pour déléguer de nouvelles instances de l'instance répliquée.

Code de mise en œuvre:

① rôle prototype

1      publique  Interface Monstre
 2      {
 3          publique Clone Monster ();
4      }

② prototype de rôle spécifique

1      publique  classe WellKnowMonster: Monster
 2      {
 3          publique Clone Monster ()
 4          {
 5              clone Monster = JsonConvert.DeserializeObject <WellKnowMonster> (JsonConvert.SerializeObject ( ce ));
6              retour clone;
7          }
 8      }
 9  
10  
11      publique  classe DynamicGeneratedMonster: Monster
 12      {
 13          publique Clone Monster ()
 14          {
 15             Clone Monster = JsonConvert.DeserializeObject <DynamicGeneratedMonster> (JsonConvert.SerializeObject ( ce ));
16              retour clone;
17          }
 18      }

③ rôles utilisateur

1      publique  classe MonsterRegistry
 2      {
 3          Dictionnaire < string , Monster> monsterDic = nouveau Dictionnaire < string , Monster> ();
4          publique  vide RegisterMonster ( chaîne clé, monstre de monstre) {
 5              monsterDic.Add (clé, monstre);
6          }
 7          publique Monstre GetMonster ( string key) {
 8              Monstre = monsterDic [key];
9               retour monster.Clone ();
dix         }
 11      }

④ essai

 avantages:

1, masquer la complexité de la création de nouvelles instances du client.

2, fournir le client peut produire des objets de l'option de type inconnu.

3, dans certaines circonstances, copie l'objet est plus efficace que de créer un nouvel objet.

Inconvénients: utilisations et

1, dans une hiérarchie de classes complexe, lorsque le système doit créer un nouvel objet de nombreux types, considérons le prototype.

2, l'inconvénient d'utiliser le modèle prototype, la copie d'objets parfois très complexes.

visiteurs

mode Visiteurs: Lorsque vous voulez ajouter de nouvelles fonctionnalités comme une combinaison d'un objet, et le paquet est pas important, il est l'utilisation des visiteurs.

A l'intérieur du restaurant au client, le client peut demander le menu d'information (comme le poivron rouge, le goût est pas lourd comme), et même certains demandera composition des matières premières.

Nous aimons cette conception pour ajouter une nouvelle méthode dans chaque lieu, si l'ajout d'une nouvelle méthode, nous devons ajouter une nouvelle méthode en deux endroits, dans le cas où plus d'un nouveau menu, nous devons modifier trois places. Dans ce cas, nous pouvons utiliser le modèle des visiteurs. Chaque élément dans les combinaisons de visiteurs, l'état de tous les objets de la collection. Une fois que l'état est collectée, les clients peuvent permettre aux visiteurs de l'état des différentes opérations. Lorsque vous avez besoin de nouvelles fonctionnalités, tant que le renforcement du visiteur peut être.

 Code de mise en œuvre:

① obtenir les menus, les éléments de menu de méthode de définition d'interface GetState

. 1      publique  Interface de MenuComponent
 2      {
 3.          Publics  vide GetState (touché des visiteurs);
 4.      }
 5.  
6.  
7.      // Menu 
8.      Publique  classe Menu: de MenuComponent
 9.      {
 10          publique  Chaîne displayInfo = " pas chaud, le goût modéré " ,
 11.          Publique  vide GetState (visiteur TIH)
 12 est          {
 13 est              visitor.Visit ( la présente );
 14          }
 15     }
 16  
17      // 原料
18      publics  classe Ingrédients: MenuComponent
 19      {
 20          publique  chaîne displayInfo = " 不辣,偏咸" ;
21          publique  vide GetState (visiteur visiteur)
 22          {
 23              visitor.Visit ( ce );
24          }
 25      }

② visiteurs, les visiteurs de définir l'interface à l'aide du menu Type d'interface

    publique  Interface visiteur 
    { 
        publique  vide visite (menu du menu);
        du public  vide Visiter (ingrédients Ingrédients); 
    } 


    Classe MenuVisitor: Visiteur 
    { 
        publique  vide visite (menu Menu) 
        { 
            Console.WriteLine (menu.displayInfo); 
        } 

        Publics  vide visite (ingrédients Ingrédients) 
        { 
            Console.WriteLine (ingredients.displayInfo); 
        } 
    }

③ essai

avantages:

1, vous permet de rejoindre une nouvelle structure d'exploitation pour la combinaison, sans changer la structure elle-même.

2, veulent se joindre à la nouvelle opération est relativement facile.

3, l'opération effectuée par le visiteur, qui est le code ensemble.

Inconvénients: utilisations et

1, lors de l'utilisation du motif de visiteur, le paquet brisera combinaison de classe.

2, car l'ajout des modèles d'accès que nécessaire pour chaque visite, afin de modifier la structure du portefeuille plus difficile.

Je suppose que tu aimes

Origine www.cnblogs.com/SunSpring/p/12507777.html
conseillé
Classement