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.
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(); } }
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; } ... }
Klebstoffausgabeschnittstelle
interface IDispensing { //code }class DispensingA : IDispensing { //code }class DispensingB : IDispensing { //code }
Hauptthread-Aufruf
flow = new FlowA(); align = flow.CreateRxAlign(); align.LoadPara(this.comboBoxPN.Text); dispens = flow.CreateDispensing(); dispens.//code...
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)!