Maison  >  Article  >  développement back-end  >  Auto-apprentissage C#09 à partir de 0 - Exemple de modèle d'usine abstrait

Auto-apprentissage C#09 à partir de 0 - Exemple de modèle d'usine abstrait

黄舟
黄舟original
2017-02-04 10:52:461619parcourir

1. Environnement applicable

(principalement utilisé dans la production et la fabrication de plusieurs produits, logiciels avec plusieurs skins, plusieurs bases de données, etc.)

  • Un système Vous ne devez pas vous fier aux détails de la façon dont les instances de classe de produits sont créées, composées et représentées, ce qui est important pour tous les types de modèles d'usine.

  • Il y a plus d'une famille de produits dans le système, et une seule des familles de produits est utilisée à la fois.

  • Les produits appartenant à une même famille de produits seront utilisés ensemble, et cette contrainte doit se refléter dans la conception du système.

  • Le système fournit une bibliothèque de classes de produits, et tous les produits apparaissent avec la même interface, de sorte que le client ne dépend pas de l'implémentation spécifique

2. Définition du modèle

Abstract Factory Pattern : Fournit une interface pour créer une série d'objets liés ou interdépendants sans spécifier leurs classes spécifiques. Le modèle d'usine abstrait, également connu sous le nom de modèle Kit, est un modèle de création d'objets.

3. Structure du motif

Le modèle Abstract Factory comprend les rôles suivants :

  • AbstractFactory : Abstract Factory

  • ConcreteFactory : Usine de béton

  • Produit abstrait : Produit abstrait

  • Produit : Produit en béton

Pour comprendre plus clairement le modèle de méthode d'usine, deux concepts doivent d'abord être introduits :

  • Hiérarchie des produits : La hiérarchie des produits est la structure d'héritage du produit. Par exemple, un résumé. La classe est un téléviseur et ses enfants. Les catégories incluent Haier TV, Hisense TV et TCL TV. Une structure hiérarchique de produits est formée entre le téléviseur abstrait et la marque spécifique du téléviseur. Le téléviseur abstrait est la catégorie parent et la marque spécifique. de la télévision est sa sous-catégorie.

  • Famille de produits : dans le modèle d'usine abstrait, la famille de produits fait référence à un groupe de produits fabriqués par la même usine et situés dans différentes hiérarchies de produits, tels que les produits Haier fabriqués par Haier Electrical Appliances. Les téléviseurs d'usine et les réfrigérateurs Haier se trouvent dans la hiérarchie des produits TV, et les réfrigérateurs Haier se trouvent dans la hiérarchie des produits réfrigérateur.

Auto-apprentissage C#09 à partir de 0 - Exemple de modèle dusine abstrait

4. Code

Interface de processus

interface IFlow
    {
        IRxAlign CreateRxAlign();

        IDispensing CreateDispensing();
    }

class FlowA : IFlow
    {        public IRxAlign CreateRxAlign()
        {            return new RxAlignA();
        }        public IDispensing CreateDispensing()
        {            return new DispensingA();
        }
    }


class FlowB : IFlow
    {        public IRxAlign CreateRxAlign()
        {            return new RxAlignB();
        }        public IDispensing CreateDispensing()
        {            return new DispensingB();
        }
    }

Interface de couplage

interface IRxAlign
    { 
        event LocationChange LocChange;        
int[] RoPulse { set; get; }        
int[] FiPulse { set; get; }        
int[] RoMaxStep { set; get; }        
double[] RoRESTarget { set; get; }        
double[] TxP { set; get; }        
double[] RESmin { set; get; }        
double[] RESmax { set; get; }

        Coordinate Location { set; get; }        
void LoadPara(string PN);        
void GoHome();        
void Start();        
void Stop();
    }

class RxAlignA : IRxAlign
    {        private ControlCard card;        
private QSFP28 product;        
private double RESmax, RESmin, RES;        
private double[] TxPower;        
public RxAlignA()
        {            
this.RESmax = 1.0;            
this.RESmin = 0.4;
        }        
public bool ConfigPara()
        {            
try
            {                
this.card = new ControlCard();                
this.product = new QSFP28();               
 return true;
            }            catch
            {                return false;
            }
        }        public void GoHome()
        {            //QSFP28 go home
        }        public void Start()
        {            //QSFP28 start
        }        public void Stop()
        {
            card = null;
            product = null;
        }
        ...
    }

class RxAlignB : IRxAlign
    {        private ControlCard card;        
 private CFP4 product;        
 private double RESmax, RESmin, RES;        
 private double[] TxPower;        
 public RxAlignB()
        {            this.RESmax = 1.0;            
 this.RESmin = 0.4;
        }        public bool ConfigPara()
        {            try
            {                this.card = new ControlCard();                
 this.product = new CFP4();                
 return true;
            }            catch
            {                return false;
            }
        }        public void GoHome()
        {            //CFP4 go home
        }        public void Start()
        {            //CFP4 start
        }        public void Stop()
        {
            card = null;
            product = null;
        }
        ...
    }

Interface de distribution de colle

interface IDispensing
    {
        //code
    }class DispensingA : IDispensing
    {
        //code
    }class DispensingB : IDispensing
    {
        //code
    }

Appel du fil principal

flow = new FlowA();
align = flow.CreateRxAlign();
align.LoadPara(this.comboBoxPN.Text);

dispens = flow.CreateDispensing();
dispens.//code...

Ce qui précède est le contenu de l'auto-apprentissage C#09 de 0 - Exemple de modèle d'usine abstrait Pour plus d'informations. contenu, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn