
Fabrika Tasarımı C# (Geliştiriciler İçin Nasıl Çalışır)
C#'ta Fabrika Deseni, tasarım desenleri kategorisine ait olan yapısal bir yaklaşımdır. C# dilindeki Fabrika Metodu Tasarım Deseni, oluşturulacak nesnenin tam yaratıcı sınıfını belirtmeden nesneleri oluşturma ile ilgili sorunları çözmeyi amaçlar.
Özünde, fabrika deseni, nesne oluşturma işlemini belirli bir sınıfa devrederek ilgilenir, bu sınıf fabrika sınıfı olarak bilinir. Bu, özellikle yeni tür nesnelerin tanıtılması söz konusu olduğunda, bir sistemin daha esnek ve daha yönetilebilir olmasını sağlar, çünkü fabrika sınıfı, nesne oluşturma sürecini yönetir, somut sınıflara olan bağımlılığı azaltır. C# dilindeki bir yaratıcı tasarım deseni olan Fabrika Metodu Deseninin nasıl uygulanıp kullanılabileceğine dikkat edelim. IronPDF PDF Oluşturma Kütüphanesini daha sonra keşfedeceğiz.
Temel Fabrika Metodu Deseni Yapısı
Fabrika metodu deseninin ardındaki temel fikir, nesneleri oluşturmak için ortak bir arayüz tanımlarken, alt sınıfların oluşturdukları nesnelerin türünü değiştirmesine izin vermektir. Bu desen bazı ana bileşenleri içerir:
- Ürün Arayüzü: Fabrika metodu tarafından oluşturulan nesnelerin yapısını belirtir.
- Somut Ürün Sınıfları: Ürün arayüzünü uygular.
- Yaratıcı Sınıf (Soyut Yaratıcı Sınıf): Ürün arayüzüne ait bir nesne döndüren fabrika metodunu beyan eder.
- Somut Yaratıcı: Fabrika metodunu somut ürünün bir örneğini teslim edecek şekilde değiştirilir.
Örnek: Araç Fabrikası
Arabalar ve kamyonlar gibi farklı araç türlerinin olduğu bir senaryo düşünün. Fabrika desenini kullanarak, kullanıcı girişi veya yapılandırma dosyasına dayalı olarak farklı türde araçlar üretebilen bir araç fabrikası oluşturacağız.
Adım 1: Ürün Arayüzünü Tanımlayın
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 InterfaceAdım 2: Somut Ürünleri Uygulayın
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 ClassAdım 3: Soyut Yaratıcı Sınıfı Oluşturun
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 ClassAdım 4: Somut Yaratıcıyı Uygulayın
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 ClassAdım 5: Müşteri Kodu Kullanımı
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 ClassYukarıdaki örnekte, VehicleFactory sınıfı soyut yaratıcı olarak hizmet ederken, ConcreteVehicleFactory sınıfı fabrika metodunu uygulayan somut yaratıcıdır. Bu yöntem, aldığı girdilere dayanarak hangi tür aracın oluşturulacağına karar verir. Müşteri kodu daha sonra farklı araçların örneklerini oluşturmak için fabrikayı kullanır, bu da nesne oluşturma mantığı ile müşteri kodu arasındaki bağlantıyı daha gevşek hale getirir.

Fabrika Deseni Kullanmanın Avantajları
Fabrika deseni, özellikle karmaşık sistemlerde birtakım avantajlar sunar:
- Gevşek Bağlantı: Müşteri kodu, somut ürün sınıfları yerine arayüzler veya soyut sınıflarla etkileşime girer. Bu, daha esnek ve değiştirmesi daha kolay bir tasarım sonucunu doğurur.
- Yeniden Kullanılabilir Nesne Yönelimli Yazılım: Fabrika deseni, sistemden nesne oluşturma mantığını ayırdığı için kodun yeniden kullanılmasını teşvik eder, bu da sistemi daha bakımı kolay ve genişletilebilir hale getirir.
- Nesne Oluşturmada Esneklik: Fabrika metodu, nesnelerin oluşturulması için farklı uygulamaların seçilmesine olanak tanır, bu da çalışma zamanında seçilebilir. Bu, özellikle gerekli nesne türünün dış faktörlere bağlı olarak değişebildiği senaryolarda kullanışlıdır.
IronPDF: .NET PDF Çözümü

IronPDF, .NET platformu için tasarlanmış bir kütüphanedir ve geliştiricilerin doğrudan HTML'denPDF dosyalarını kolayca oluşturmasına, düzenlemesine ve işlemesine yardımcı olur. Ana cazibesi, web içeriğini hızla ve yüksek doğrulukla PDF belgelerine dönüştürme yeteneğinde yatmaktadır; bu, Chrome tabanlı bir render motoru kullanması sayesinde mümkün olmaktadır.
Ana özellikler arasında HTML dizeleri veya URL'lerden PDF oluşturma, web sayfalarını anında PDF olarak yetiştirme ve formlar, sunucu uygulamaları ve güvenli intranetlerle çalışabilme bulunur. Performansı verimlilik için optimize edilmiştir ve asenkron işlemler, özel günlüklendirme ve hızlıca başlamanızı sağlayacak geniş dokümantasyon yetenekleri sunar.
IronPDF, HTML'den PDF'ye dönüşümde mükemmeldir, özgün düzenler ve stillerin hassas bir şekilde korunmasını sağlar. Raporlar, faturalar ve belgeler gibi web tabanlı içeriklerden PDF oluşturmak için mükemmeldir. HTML dosyaları, URL'ler ve ham HTML dizeleri için destekle, IronPDF yüksek kaliteli PDF belgelerini kolayca üretir.
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 ClassKod Örneği
IronPDF'in Fabrika Deseni ile nasıl entegre edilebileceğini göstermek için basit bir örnek oluşturalım. Fabrika Deseni, bir üst sınıf içerisinde somut ürünler veya nesneler oluşturmak için bir yol sunan bir yaratıcı tasarım desenidir ve alt sınıfların üretilen belirli nesneleri değiştirmelerine izin verir. Bu, HTML dizelerden, URL'lerden veya dosyalardan farklı türde PDF belgeleri oluşturmakla iyi uyum sağlar.
IPdfCreator adında PDF'ler oluşturma yöntemi tanımlayan bir arayüz oluşturacağız ve ardından IronPDF kullanarak PDF'leri farklı şekillerde üreten farklı fabrika sınıfları uygulayacağız.
Adım 1: IPdfCreator Arayüzünü Tanımlayın
Bu arayüz, tüm somut fabrikaların uygulayacağı CreatePdf yöntemini bildirir.
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 InterfaceAdım 2: Somut Fabrikaları Uygulayın
Burada IPdfCreator'ın iki somut uygulamasını tanımlıyoruz: birisi HTML dizelerinden PDF oluşturma ve diğeri URL'lerden PDF oluşturma için.
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 ClassAdım 3: Fabrika Kullanımı
Uygulamanızda, artık bu fabrikaları kullanarak, PDF oluşturma sürecinin ayrıntılarını düşünmeden farklı kaynaklardan PDF belgeleri oluşturabilirsiniz.
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 ClassBu kurulımda, HtmlStringPdfCreator ve UrlPdfCreator PDF üreten somut fabrikalardır. Program sınıfı, müşteri olarak, HTML dizelerden veya URL'lerden nasıl PDF oluşturulduğunun ayrıntılarını bilmeden bu fabrikaları kullanır. Bu yaklaşım esneklik sağlar, çünkü IPdfCreator arayüzünü uygulayan daha fazla fabrika ekleyerek (örneğin, dosyalardan veya akışlardan) PDF oluşturmanın yeni yollarını kolayca tanıtabilirsiniz, bu da nesne yönelimli tasarımın Açık/Kapalı İlkesine uyar.
Çıktı
Aşağıdaki ekran görüntüleri kodun çıktısıdır:


Sonuç
C# dilindeki fabrika deseni, nesne oluşturmayı yönetmek için bir çerçeve sağlar ve yazılım tasarımını daha bakımı kolay ve genişletilebilir hale getirir. Soyut bir fabrikayı uygulayıp oluşturma mantığını devrederek, geliştiriciler daha adapte edilebilir ve genişletilebilir sistemler oluşturabilir. Birkaç sınıf veya karmaşık bağımlılıkları olan bir sistemle ilgilenip ilgilenmediğinizden bağımsız olarak, fabrika deseni, kesin sınıf nesne oluşturma için yapılandırılmış bir yaklaşım sunar. Kullanıcı girdisine, yapılandırmaya veya uygulama durumuna bağlı olarak oluşturulacak nesne türünün değişebileceği senaryolarda özellikle yararlıdır.
IronPDF, başlangıç için IronPDF'ün ücretsiz bir deneme sürümünü sunar ve lisans seçenekleri liteLicense ile başlar, .NET uygulamalarına PDF işlevselliği entegre etmek isteyen geliştiricilere hitap eder.

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.
İlgili Makaleler


