
Fabrikmuster C# (Funktionsweise für Entwickler)
Das Factory Pattern in C# ist ein struktureller Ansatz, der zur Kategorie der Entwurfsmuster gehört. Bei dem Factory Method Design Pattern in C# geht es darum, Probleme im Zusammenhang mit der Objekterstellung zu lösen, ohne die genaue Erstellerklasse des zu erstellenden Objekts anzugeben.
Im Wesentlichen befasst sich das Factory Pattern mit der Objekterstellung, indem es sie an eine bestimmte Klasse delegiert, die als Factory-Klasse bekannt ist. Dies ermöglicht es einem System, flexibler und leichter zu verwalten zu sein, insbesondere beim Einführen neuer Objekttypen, da die Factory-Klasse den Objekterstellungsprozess übernimmt und die Abhängigkeit von konkreten Klassen reduziert. Lassen Sie uns eintauchen, wie das Factory Method Pattern, ein Erzeugungsmuster in C#, implementiert und verwendet werden kann. Wir werden die IronPDF PDF Generation Library später erkunden.
Grundlegender Aufbau von Factory-Methoden-Mustern
Die Kernidee des Factory Method Patterns besteht darin, eine gemeinsame Schnittstelle zur Objekterstellung zu definieren, während Unterklassen den Typ der Objekte ändern können, die sie erstellen. Dieses Muster umfasst einige wichtige Komponenten:
- Produktschnittstelle: Legt die Struktur der durch die Factory-Methode erzeugten Objekte fest.
- Konkrete Produktklassen: Implementieren Sie die Produktschnittstelle.
- Creator-Klasse (Abstract Class Creator): Deklariert die Factory-Methode, die ein Objekt der Produktschnittstelle zurückgibt.
- Concrete Creator: Modifiziert die Fabrikmethode, um eine Instanz des Betonprodukts zu liefern.
Beispiel: Fahrzeugfabrik
Betrachten Sie ein Szenario, in dem wir verschiedene Fahrzeugtypen wie Autos und Lastwagen haben. Wir verwenden das Factory Pattern, um eine Fahrzeugfabrik zu erstellen, die verschiedene Fahrzeugtypen basierend auf Benutzereingaben oder einer Konfigurationsdatei erstellen kann.
Schritt 1: Definieren Sie die Produktschnittstelle
public interface IVehicle
{
// Method to display information about the vehicle
void DisplayInfo();
}Public Interface IVehicle
' Method to display information about the vehicle
Sub DisplayInfo()
End InterfaceSchritt 2: Konkrete Produkte implementieren
public class Car : IVehicle
{
// Displays Car specific information
public void DisplayInfo()
{
Console.WriteLine("This is a Car.");
}
}
public class Truck : IVehicle
{
// Displays Truck specific information
public void DisplayInfo()
{
Console.WriteLine("This is a Truck.");
}
}Public Class Car
Implements IVehicle
' Displays Car specific information
Public Sub DisplayInfo()
Console.WriteLine("This is a Car.")
End Sub
End Class
Public Class Truck
Implements IVehicle
' Displays Truck specific information
Public Sub DisplayInfo()
Console.WriteLine("This is a Truck.")
End Sub
End ClassSchritt 3: Erstellen der abstrakten Creator-Klasse
public abstract class VehicleFactory
{
// Factory Method to create a vehicle instance
public abstract IVehicle CreateVehicle(string type);
}Public MustInherit Class VehicleFactory
' Factory Method to create a vehicle instance
Public MustOverride Function CreateVehicle(ByVal type As String) As IVehicle
End ClassSchritt 4: Implementierung des Concrete Creator
public class ConcreteVehicleFactory : VehicleFactory
{
public override IVehicle CreateVehicle(string type)
{
// Create vehicle based on type
switch (type.ToLower())
{
case "car": return new Car();
case "truck": return new Truck();
default: throw new ArgumentException("Invalid vehicle type");
}
}
}Public Class ConcreteVehicleFactory
Inherits VehicleFactory
Public Overrides Function CreateVehicle(ByVal type As String) As IVehicle
' Create vehicle based on type
Select Case type.ToLower()
Case "car"
Return New Car()
Case "truck"
Return New Truck()
Case Else
Throw New ArgumentException("Invalid vehicle type")
End Select
End Function
End ClassSchritt 5: Client-Code-Verwendung
class Program
{
static void Main(string[] args)
{
// Create factory instance
VehicleFactory factory = new ConcreteVehicleFactory();
// Create a Car and display its info
IVehicle car = factory.CreateVehicle("car");
car.DisplayInfo();
// Create a Truck and display its info
IVehicle truck = factory.CreateVehicle("truck");
truck.DisplayInfo();
}
}Friend Class Program
Shared Sub Main(ByVal args() As String)
' Create factory instance
Dim factory As VehicleFactory = New ConcreteVehicleFactory()
' Create a Car and display its info
Dim car As IVehicle = factory.CreateVehicle("car")
car.DisplayInfo()
' Create a Truck and display its info
Dim truck As IVehicle = factory.CreateVehicle("truck")
truck.DisplayInfo()
End Sub
End ClassIm obigen Beispiel dient die VehicleFactory-Klasse als abstrakter Ersteller, wobei die ConcreteVehicleFactory-Klasse der konkrete Ersteller ist, der die Factory-Methode CreateVehicle implementiert. Diese Methode entscheidet, welchen Fahrzeugtyp basierend auf den empfangenen Eingaben zu erstellen. Der Client-Code verwendet dann die Fabrik, um Instanzen verschiedener Fahrzeuge zu erstellen und fördert die lose Kopplung zwischen der Objekterstellungslogik und dem Client-Code.

Vorteile der Verwendung des Factory-Musters
Das Factory Pattern bietet mehrere Vorteile, insbesondere in komplexen Systemen:
- Lose Kopplung: Der Client-Code interagiert mit Schnittstellen oder abstrakten Klassen anstelle von konkreten Produktklassen. Dies führt zu einem Design, das flexibler und leichter zu ändern ist.
- Wiederverwendbare objektorientierte Software: Das Factory-Pattern fördert die Wiederverwendung von Code, da es die Objekterzeugungslogik vom System trennt, wodurch das System einfacher zu warten und zu erweitern ist.
- Flexibilität bei der Objekterstellung: Die Factory-Methode ermöglicht verschiedene Implementierungen zur Objekterstellung, die zur Laufzeit ausgewählt werden können. Dies ist besonders nützlich in Szenarien, in denen der benötigte Objekttyp aufgrund externer Faktoren variieren kann.
IronPDF: .NET PDF-Lösung

IronPDF ist eine Bibliothek, die für die .NET-Plattform entwickelt wurde und Entwicklern dabei hilft, PDF-Dateien direkt aus HTML, CSS, Bildern und JavaScript einfach zu erstellen, zu bearbeiten und zu manipulieren, ohne sich in komplexe PDF-Erstellungs-APIs vertiefen zu müssen. Ihr Hauptanziehungspunkt liegt in der Fähigkeit, Webinhalte schnell und mit hoher Genauigkeit in PDF-Dokumente zu verwandeln, dank der Verwendung eines auf Chrome basierenden Rendering-Engines.
Zu den wichtigsten Funktionen gehören die Erstellung von PDFs aus HTML-Strings oder URLs, das Rendern von Webseiten als PDFs im Handumdrehen und die Fähigkeit, mit Anwendungsformularen, Serveranwendungen und sicheren Intranets zu arbeiten, unter anderem. Seine Leistung ist auf Effizienz optimiert, mit Funktionen für asynchrone Operationen, benutzerdefiniertes Protokollieren und umfangreiche Dokumentation, um Ihnen schnell den Einstieg zu erleichtern.
IronPDF überzeugt in der HTML-zu-PDF-Konvertierung, indem es den originalen Layouts und Stilen präzise erhält. Es ist ideal zur Erstellung von PDFs aus webbasierten Inhalten wie Berichten, Rechnungen und Dokumentationen. Mit Unterstützung für HTML-Dateien, URLs und rohe HTML-Strings erstellt IronPDF problemlos hochwertige PDF-Dokumente.
using IronPdf;
class Program
{
static void Main(string[] args)
{
// Initialize a Pdf Renderer with a Chrome Rendering Engine
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Initialize a Pdf Renderer with a Chrome Rendering Engine
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End ClassCodebeispiel
Um zu veranschaulichen, wie IronPDF mit dem Factory Pattern integriert werden kann, erstellen wir ein vereinfachtes Beispiel. Das Factory Pattern ist eine Art von Erzeugungsmuster, das eine Möglichkeit bietet, konkrete Produkte oder Objekte innerhalb einer Oberklasse zu erstellen, wodurch Unterklassen die spezifischen Objekte ändern können, die produziert werden. Dies passt gut zum Erstellen verschiedener Arten von PDF-Dokumenten basierend auf spezifischen Anforderungen, wie z.B. aus HTML-Strings, URLs oder Dateien.
Wir erstellen eine Schnittstelle namens IPdfCreator, die eine Methode zur Erstellung von PDFs definiert, und implementieren dann verschiedene Fabrikklassen, die PDFs auf verschiedene Weise mit IronPDF erstellen.
Schritt 1: Definieren Sie die IPdfCreator-Schnittstelle
Diese Schnittstelle deklariert die CreatePdf-Methode, die alle konkreten Fabriken implementieren werden.
public interface IPdfCreator
{
// Method responsible for creating a PDF
void CreatePdf(string source);
}Public Interface IPdfCreator
' Method responsible for creating a PDF
Sub CreatePdf(ByVal source As String)
End InterfaceSchritt 2: Konkrete Fabriken implementieren
Hier definieren wir zwei konkrete Implementierungen von IPdfCreator: eine zum Erstellen von PDFs aus HTML-Strings und eine weitere aus URLs.
public class HtmlStringPdfCreator : IPdfCreator
{
// Creates a PDF from an HTML string
public void CreatePdf(string htmlString)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("HtmlStringPdf.pdf");
}
}
// Create PDF from a given URL
public class UrlPdfCreator : IPdfCreator
{
public void CreatePdf(string url)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("UrlPdf.pdf");
}
}Public Class HtmlStringPdfCreator
Implements IPdfCreator
' Creates a PDF from an HTML string
Public Sub CreatePdf(ByVal htmlString As String)
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
pdf.SaveAs("HtmlStringPdf.pdf")
End Sub
End Class
' Create PDF from a given URL
Public Class UrlPdfCreator
Implements IPdfCreator
Public Sub CreatePdf(ByVal url As String)
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf(url)
pdf.SaveAs("UrlPdf.pdf")
End Sub
End ClassSchritt 3: Verwendung der Factory
In Ihrer Anwendung können Sie diese Fabriken jetzt verwenden, um PDF-Dokumente aus verschiedenen Quellen zu erstellen, ohne sich um die Details des PDF-Erstellungsprozesses kümmern zu müssen.
class Program
{
static void Main(string[] args)
{
// Add your IronPDF license key
License.LicenseKey = "License-Key";
// Create PDF from HTML string
IPdfCreator htmlPdfCreator = new HtmlStringPdfCreator();
htmlPdfCreator.CreatePdf("<h1>Hello, World!</h1>");
// Create PDF from URL
IPdfCreator urlPdfCreator = new UrlPdfCreator();
urlPdfCreator.CreatePdf("http://example.com");
}
}Friend Class Program
Shared Sub Main(ByVal args() As String)
' Add your IronPDF license key
License.LicenseKey = "License-Key"
' Create PDF from HTML string
Dim htmlPdfCreator As IPdfCreator = New HtmlStringPdfCreator()
htmlPdfCreator.CreatePdf("<h1>Hello, World!</h1>")
' Create PDF from URL
Dim urlPdfCreator As IPdfCreator = New UrlPdfCreator()
urlPdfCreator.CreatePdf("http://example.com")
End Sub
End ClassIn diesem Setup sind HtmlStringPdfCreator und UrlPdfCreator konkrete Fabriken, die PDFs produzieren. Die Program-Klasse, die als Client fungiert, verwendet diese Fabriken, ohne die komplizierten Details wissen zu müssen, wie PDFs aus HTML-Strings oder URLs generiert werden. Dieser Ansatz bietet Flexibilität, da Sie neue Wege zur Erstellung von PDFs (z.B. aus Dateien oder Streams) einfach einführen können, indem Sie weitere Fabriken hinzufügen, die die IPdfCreator-Schnittstelle implementieren, und so das Open/Closed-Prinzip des objektorientierten Designs befolgen.
Ausgabe
Die folgenden Screenshots sind die Ausgabe des Codes:


Abschluss
Das Factory Pattern in C# bietet ein Framework zur Verwaltung der Objekterstellung, das das Softwaredesign wartbarer und erweiterbarer macht. Durch die Verwendung konkreter Klassen zur Implementierung einer abstrakten Fabrik und zur Delegation der Erstellung von Logik können Entwickler Systeme erstellen, die leichter anpassbar und erweiterbar sind. Egal, ob Sie mit wenigen Klassen oder einem System mit komplexen Abhängigkeiten arbeiten, das Fabrikmuster bietet einen strukturierten Ansatz zur genauen Erstellung von Klassenobjekten. Es ist besonders vorteilhaft in Szenarien, in denen der Typ der zu erstellenden Objekte basierend auf Benutzereingaben, Konfigurationen oder dem Anwendungszustand variieren kann.
IronPDF bietet eine kostenlose Testversion von IronPDF an, um zu beginnen, und Lizenzoptionen beginnen bei liteLicense, um Entwicklern gerecht zu werden, die PDF-Funktionen in ihre .NET-Anwendungen integrieren möchten.

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der Pionierarbeit in der C# PDF-Technologie leistet. Als der ursprüngliche Entwickler hinter der Kern-Codebasis von Iron Software hat er die Produktarchitektur des Unternehmens seit seiner Gründung geprägt und es zusammen mit CEO Cameron Rimington in ein Unternehmen mit mehr als 50 Mitarbeitern verwandelt, das die NASA, Tesla und globale Regierungsbehörden beliefert.
Verwandte Artikel


