Heim > Backend-Entwicklung > C#.Net-Tutorial > Selbststudium C#09 ab 0 – Beispiel für ein abstraktes Fabrikmuster

Selbststudium C#09 ab 0 – Beispiel für ein abstraktes Fabrikmuster

黄舟
Freigeben: 2017-02-04 10:52:46
Original
1645 Leute haben es durchsucht

1. Anwendbare Umgebung

(wird hauptsächlich bei der Produktion und Herstellung mehrerer Produkte, Software mit mehreren Skins, mehreren Datenbanken usw. verwendet)

  • Ein System Sie sollten sich nicht auf die Details verlassen, wie Produktklasseninstanzen erstellt, zusammengesetzt und ausgedrückt werden, was für alle Arten von Factory-Mustern wichtig ist.

  • Es gibt mehr als eine Produktfamilie im System und es wird jeweils nur eine der Produktfamilien verwendet.

  • Produkte, die zur gleichen Produktfamilie gehören, werden zusammen verwendet, und diese Einschränkung muss im Design des Systems berücksichtigt werden.

  • Das System stellt eine Produktklassenbibliothek bereit und alle Produkte werden mit derselben Schnittstelle angezeigt, sodass der Client nicht auf die spezifische Implementierung angewiesen ist

2. Musterdefinition

Abstract Factory Pattern: Bietet eine Schnittstelle zum Erstellen einer Reihe verwandter oder voneinander abhängiger Objekte, ohne deren spezifische Klassen anzugeben. Das abstrakte Factory-Muster, auch Kit-Muster genannt, ist ein Objekterstellungsmuster.

3. Musterstruktur

Das Abstract Factory-Muster umfasst die folgenden Rollen:

  • AbstractFactory: Abstract Factory

  • ConcreteFactory: Betonfabrik

  • AbstractProduct: Abstraktes Produkt

  • Produkt: Betonprodukt

Um das Factory-Methodenmuster besser zu verstehen, müssen zunächst zwei Konzepte eingeführt werden:

  • Produkthierarchie: Die Produkthierarchie ist die Vererbungsstruktur des Produkts. Zum Beispiel eine Zusammenfassung Die Klasse ist ein Fernseher und seine untergeordneten Kategorien. Zu den Kategorien gehören Haier TV, Hisense TV und TCL TV. Zwischen dem abstrakten Fernseher und der spezifischen TV-Marke wird eine Produkthierarchiestruktur gebildet von TV ist seine Unterkategorie.

  • Produktfamilie: Im abstrakten Fabrikmuster bezieht sich die Produktfamilie auf eine Gruppe von Produkten, die von derselben Fabrik hergestellt werden und sich in unterschiedlichen Produkthierarchien befinden, wie z. B. Haier-Produkte, die von Haier Electrical Appliances hergestellt werden Fabrikfernseher und Haier-Kühlschränke sind in der TV-Produkthierarchie und Haier-Kühlschränke in der Kühlschrank-Produkthierarchie aufgeführt.

Selbststudium C#09 ab 0 – Beispiel für ein abstraktes Fabrikmuster

4. Code

Prozessschnittstelle

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();
        }
    }
Nach dem Login kopieren

Kopplungsschnittstelle

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;
        }
        ...
    }
Nach dem Login kopieren

Klebstoffausgabeschnittstelle

interface IDispensing
    {
        //code
    }class DispensingA : IDispensing
    {
        //code
    }class DispensingB : IDispensing
    {
        //code
    }
Nach dem Login kopieren

Hauptthread-Aufruf

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

dispens = flow.CreateDispensing();
dispens.//code...
Nach dem Login kopieren

Das Obige ist der Inhalt des Selbststudiums C#09 von 0 – Beispiel für ein abstraktes Fabrikmuster Inhalt, achten Sie bitte auf die chinesische PHP-Website (www.php.cn)!


Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage