.NET-Builder-Muster erklärt
Definition des Builder-Musters:
Trennung der Konstruktion eines komplexen Objekts von seiner Darstellung, sodass mit demselben Konstruktionsprozess unterschiedliche Darstellungen erstellt werden können. Dieses Entwurfsmuster wird als Builder-Muster bezeichnet.
Builder Musterstrukturdiagramm:
Builder-Musterrolle:
1 Builder: zum Erstellen eines Produktobjekts. Jede Komponente spezifiziert eine abstrakte Schnittstelle.
2 ConcreteBuilder: Implementieren Sie die Builder-Schnittstelle, um die verschiedenen Komponenten des Produkts zu konstruieren und zusammenzubauen, die von ihm erstellte Darstellung zu definieren und zu klären und eine Schnittstelle zum Abrufen des Produkts bereitzustellen.
3 Director: Konstruieren Sie ein Objekt mithilfe der Builder-Schnittstelle.
4 Produkt: Stellt ein konstruiertes komplexes Objekt dar. ConcreteBuilder erstellt eine interne Darstellung des Produkts und definiert seinen Montageprozess, einschließlich der Klassen, die die Komponententeile definieren, einschließlich der Schnittstellen für den Zusammenbau dieser Teile zum Endprodukt.
Das Folgende ist ein Beispiel für den Bau eines Hauses im wirklichen Leben, um das Builder-Muster zu erklären:
1. Zusammenfassung der Builder-Schnittstelle, die die Bedingungen für die Erstellung eines zu implementierenden Haustyps enthält. Nach der Erstellung werden die Anzahl der Zimmer und die Beschreibung des Hauses zurückgegeben.
/// <summary> /// 抽象建造者 /// </summary> public interface IHouse { /// <summary> /// 创建房子种类的条件 /// </summary> /// <returns></returns> bool GetBackyard(); /// <summary> /// 创建的房间数 /// </summary> /// <returns></returns> long NoOfRooms(); /// <summary> /// 描述 /// </summary> /// <returns></returns> string Description(); }
2. Erben Sie die IHouse-Schnittstelle, den spezifischen Builder, der hier einen Raum erstellt, der ein Wohnzimmer, eine Küche, ein Badezimmer usw. umfasst ein Schlafzimmer, insgesamt vier. In einem solchen Haus gibt es nur wenige Räume.
public class CRoom { public string RoomName { get; set; } } /// <summary> /// 具体建造者 /// </summary> public class CSFH:IHouse { private bool mblnBackyard; private Hashtable Rooms; public CSFH() { CRoom room = new CRoom(); room.RoomName = "一楼客厅"; Rooms = new Hashtable(); Rooms.Add("room1", room); room = new CRoom(); room.RoomName = "一楼厨房"; Rooms.Add("room2", room); room = new CRoom(); room.RoomName = "一楼洗手间"; Rooms.Add("room3", room); room = new CRoom(); room.RoomName = "一楼卧室"; Rooms.Add("room4",room); mblnBackyard = true; } public bool GetBackyard() { return mblnBackyard; } public long NoOfRooms() { return Rooms.Count; } public string Description() { IDictionaryEnumerator myEnumerator = Rooms.GetEnumerator(); string strDescription = "这个房子共 " + Rooms.Count + " 间 \n"; while (myEnumerator.MoveNext()) { strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName; } return strDescription; } }
3. Übernehmen Sie die IHouse-Schnittstelle, den spezifischen Builder, der hier ein Haus erstellt, das nur drei Räume umfasst: Schlafzimmer, Wohnzimmer und Küche . So ein Haus.
/// <summary> /// 其他具体建造者 /// </summary> public class CApt:IHouse { private bool mblnBackyard; private Hashtable Rooms; public CApt() { Rooms = new Hashtable(); CRoom room = new CRoom(); room.RoomName = "卧室"; Rooms.Add("room1", room); room = new CRoom(); room.RoomName = "客厅"; Rooms.Add("room2", room); room = new CRoom(); room.RoomName = "厨房"; Rooms.Add("room3", room); mblnBackyard = false; } public bool GetBackyard() { return mblnBackyard; } public long NoOfRooms(){ return Rooms.Count; } public string Description(){ IDictionaryEnumerator myEnumerator = Rooms.GetEnumerator(); string strDescription = "这个房子一共 " + Rooms.Count + " 间 \n"; while (myEnumerator.MoveNext()) { strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName; } return strDescription; } }
4. Erstellen Sie einen Leitfaden, der angibt, welcher Bauunternehmer welche Art von Raum bauen soll.
/// <summary> /// 指导者 /// </summary> public class CDirector { public IHouse BuildHouse(bool blnBackyard) { if (blnBackyard) { return new CSFH(); } else { return new CApt(); } } }
5. Erstellen Sie:
static void Main(string[] args) { CDirector objDirector = new CDirector();//实例化指导者 IHouse objHouse; string Input = Console.ReadLine();//输入条件指导哪位创建者创建房间 objHouse = objDirector.BuildHouse(bool.Parse(Input)); Console.WriteLine(objHouse.Description()); Console.ReadLine(); }
Builder Mode Main Used „ein komplexes Objekt in Schritten aufbauen“, wobei „Schritt für Schritt“ ein stabiler Algorithmus ist, während sich die Teile des komplexen Objekts häufig ändern
Abstrakte Klassen sind für das Produkt nicht erforderlich, insbesondere aufgrund der Erstellung Wenn dieses Muster aufgrund der Komplexität des Objektalgorithmus verwendet wird oder wenn dieses Muster auf den Produktgenerierungsprozess angewendet wird, können die Endergebnisse stark variieren und es ist unwahrscheinlich, dass eine abstrakte Produktklasse verfeinert wird.
Das vorherige abstrakte Fabrikmuster löst die Bedarfsänderungen von „Serienobjekten“ und das Builder-Muster löst die Bedarfsänderungen von „Objektteilen“.
Durch die Verwendung des Builder-Musters kann das innere Erscheinungsbild des Produkts unabhängig geändert werden. Die Verwendung des Builder-Musters ermöglicht es dem Kunden, die Details der internen Zusammensetzung des Produkts nicht zu kennen
Jeder Builder ist relativ unabhängig und hat nichts mit anderen Buildern zu tun.
Das Builder-Muster eignet sich für Eigenschaften von Produktobjekten, die generiert werden müssen. Das Builder-Muster kann die Generierungsreihenfolge erzwingen. Die zu generierenden Produktobjekte weisen komplexe interne Strukturen auf.

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Die Nutzungsmethoden von Symbolen in der C-Sprachabdeckung Arithmetik, Zuordnung, Bedingungen, Logik, Bitoperatoren usw. werden für grundlegende mathematische Operationen verwendet, Zuordnungsoperatoren werden zur Zuordnung und Addition verwendet, Subtraktion, Multiplikationszuordnung und Abteilungszuweisung, Zustandsbetreiber werden für Unterschiede verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Logische Operationen werden verwendet. Zeiger, Markierungen am Ende der Datei und nicht numerische Werte.

Das Char -Array speichert Zeichensequenzen in der C -Sprache und wird als char Array_name [Größe] deklariert. Das Zugriffselement wird durch den Einweisoperator weitergeleitet, und das Element endet mit dem Null -Terminator '\ 0', der den Endpunkt der Zeichenfolge darstellt. Die C -Sprache bietet eine Vielzahl von String -Manipulationsfunktionen wie Strlen (), Strcpy (), Strcat () und strcmp ().

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, während asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, während asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, während der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abhängt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsfähigkeit asynchron verwenden müssen.

In C wird der Zeichenentyp in Saiten verwendet: 1. Speichern Sie ein einzelnes Zeichen; 2. Verwenden Sie ein Array, um eine Zeichenfolge darzustellen und mit einem Null -Terminator zu enden. 3. Durch eine Saitenbetriebsfunktion arbeiten; 4. Lesen oder geben Sie eine Zeichenfolge von der Tastatur aus.

In der C -Sprache werden Sonderzeichen durch Escape -Sequenzen verarbeitet, wie z. B.: \ n repräsentiert Linienbrüche. \ t bedeutet tab charakter. Verwenden Sie Escape -Sequenzen oder Zeichenkonstanten, um Sonderzeichen darzustellen, wie z. B. char c = '\ n'. Beachten Sie, dass der Backslash zweimal entkommen muss. Verschiedene Plattformen und Compiler haben möglicherweise unterschiedliche Fluchtsequenzen. Bitte wenden Sie sich an die Dokumentation.

In der C -Sprache kann die char -Typ -Konvertierung direkt in einen anderen Typ konvertiert werden, wenn: Casting: Verwenden von Casting -Zeichen. Automatische Konvertierung des Typs: Wenn ein Datentyp einen anderen Werttyp berücksichtigen kann, wandelt der Compiler diese automatisch um.

Es gibt keine integrierte Summenfunktion in der C-Sprache, daher muss sie selbst geschrieben werden. Die Summe kann erreicht werden, indem das Array durchquert und Elemente akkumulieren: Schleifenversion: Die Summe wird für die Schleifen- und Arraylänge berechnet. Zeigerversion: Verwenden Sie Zeiger, um auf Array-Elemente zu verweisen, und eine effiziente Summierung wird durch Selbststillstandszeiger erzielt. Dynamisch Array -Array -Version zuweisen: Zuordnen Sie Arrays dynamisch und verwalten Sie selbst den Speicher selbst, um sicherzustellen, dass der zugewiesene Speicher befreit wird, um Speicherlecks zu verhindern.

In der C -Sprache ist der Hauptunterschied zwischen char und wchar_t die Zeichencodierung: char verwendet ASCII oder erweitert ASCII, wchar_t Unicode; char nimmt 1-2 Bytes auf, wchar_t nimmt 2-4 Bytes auf; char ist für englischen Text geeignet. Wchar_t ist für mehrsprachige Text geeignet. char ist weithin unterstützt, wchar_t hängt davon ab, ob der Compiler und das Betriebssystem Unicode unterstützen. char ist in der Charakterbereich begrenzt, WCHAR_T hat einen größeren Charakterbereich und spezielle Funktionen werden für arithmetische Operationen verwendet.
