Concept de modèle d'usine simple
Il s'agit d'établir une classe d'usine et de créer des instances de certaines classes qui implémentent la même interface. L'essence d'un modèle d'usine simple est qu'une classe d'usine détermine dynamiquement quelle instance de classe de produit (ces classes de produits hérite d'une classe ou d'une interface parent) doit être créée en fonction des paramètres entrants.
Diagramme UML du mode d'usine simple
Code de motif d'usine simple
Lorsque j'apprenais le modèle d'usine simple, j'ai utilisé un exemple lié aux humains. Les humains sont divisés en hommes et femmes dans le monde et définissent d'abord une interface abstraite pour les produits humains.
/ ** * Il s'agit d'un package de modèle d'usine * / package com.roc.factory; / ** * Interface abstraite du produit humain * @author liaowp * * / interface publique humain {public void say ();}Ensuite, les hommes et les femmes ont des moyens de parler.
/ ** * Il s'agit d'un package de modèle d'usine * / package com.roc.factory; / ** * man man * @author liaowp * * / public class man implémente humain {/ * Say Method * @see com.roc.factory.human # Say () * / @Override public Void Says () {System.out.println ("Man"); }} / ** * Ceci est un package de modèle d'usine * / package com.roc.factory; / ** femme * @author liaowp * * / public class woman implémente humain {/ * Say Method * @see com.roc.factory.human # say () * / @override public Void Says () {System.out.println ("Woman"); }}Enfin, écrivez une classe d'usine pour créer des hommes et des femmes. La première méthode est obtenue en utilisant un jugement logique.
package com.roc.factory; / ** * Factory simple * @Author liaowp * * / classe publique SampleFactory {public static humain makehuman (string type) {if (type.equals ("man")) {humain man = new man (); retour de l'homme; } else if (type.equals ("womman")) {femme humaine = new woman (); retour de la femme; } else {System.out.println ("ne peut pas produire"); retourner null; }}}La deuxième méthode consiste à utiliser le rayonnement Java pour l'implémenter. Je pense que ce type d'implémentation est meilleur.
package com.roc.factory; / ** * Implémentation de rayonnement d'usine simple * @author liaowp * * / public class samplefactory1 {public static humain makehuman (classe c) {humain humain = null; essayez {humain = (humain) class.forname (c.getName ()). NewInstance (); } catch (InstantiationException E) {// TODO GÉNÉRATEUR AUTO GÉNÉRÉ BLOC SYSTEM.out.println ("Les classes abstraites ou les interfaces ne sont pas prises en charge"); e.printStackTrace (); } Catch (illégalaccessException e) {// Bloc de capture généré par Auto-généré e.PrintStackTrace (); System.out.println ("Aucune autorisation suffisante, c'est-à-dire que les objets privés ne sont pas accessibles"); } catch (classNotFoundException e) {// TODO GÉNÉRATEUR AUTO GÉNÉRÉ BLOC SYSTEM.out.println ("classNot existe"); e.printStackTrace (); } return humain; }}Enfin, le code du client
package com.roc.factory; / ** * test d'usine simple * @Author liaowp * * / public class Client {public static void main (String [] args) {// humain man = samplefactory.makehuman ("man"); // man.say (); // homme humain = sampefactory.makehuman ("womman"); // womman. SampleFactory.MakeHuman ("TTTT"); Homme humain = échantillon Factory1.MakeHuman (man.class); man.say (); Femme humaine = échantillonnage Factory1.MakeHuman (Woman.class); femme.say (); }} Scénario d'application en mode d'usine simple
Avantages: la classe d'usine est la clé de l'ensemble du modèle. Il contient les jugements logiques nécessaires et détermine quel objet de classe spécifique doit être créé en fonction des informations fournies par le monde extérieur. En utilisant la classe d'usine, le monde extérieur peut se débarrasser de la situation embarrassante de créer directement des objets de produit spécifiques et n'a besoin d'être responsable des objets de «consommation». Peu importe comment ces objets sont créés et organisés. Leurs responsabilités et droits respectifs sont clarifiés, ce qui est propice à l'optimisation de l'ensemble de l'architecture logicielle.
Inconvénients: Étant donné que la classe d'usine concentre la logique de création de tous les cas, viole le principe d'une allocation de responsabilité cohésive élevée, toute logique de création est concentrée dans une classe d'usine; Les classes qu'il peut créer ne peut être considérée qu'à l'avance. Si une nouvelle classe doit être ajoutée, la classe d'usine doit être modifiée. Comme le nombre de catégories de produits spécifiques dans le système continue d'augmenter, il peut y avoir une exigence pour que les classes d'usine créent des instances différentes selon différentes conditions. Ce jugement des conditions et le jugement de types de produits spécifiques sont entrelacés ensemble, ce qui rend difficile d'éviter la propagation des fonctions du module, qui est très défavorable à la maintenance et à l'expansion du système;
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.