在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
這C# 中的工廠模式是一種結構性方法,屬於設計模式的類別。 工廠方法設計模式在 C# 中旨在解決創建對象時,不必指定將被創建的對象的具體創建類。
基本上,工厂模式通过将对象创建委托给一个特定的类,即工厂类来处理。 這使系統更加靈活且易於管理,特別是在引入新類型的對象時,因為工廠類處理對象的創建過程,從而減少對具體類的依賴。 讓我們深入探討工廠方法模式,一種在 C# 中的創建型設計模式的實現和使用方法。 我們將探討IronPDF PDF 生成庫以後。
工廠方法模式的核心理念是在設計出一個通用介面以創建對象的同時,允許子類改變它們創建的對象類型。 此模式涉及幾個關鍵組件:抽象工廠模式、創建型設計模式、工廠設計模式、現有程式碼、基本工廠模式、抽象工廠模式、實際案例、具體產品、相關或相依物件和具體類別。
考慮一個情境,我們有不同類型的車輛,例如汽車和卡車。 我們將使用工廠模式來創建一個車輛工廠,該工廠可以根據用戶輸入或配置文件創建不同類型的車輛。
public interface IVehicle
{
void DisplayInfo();
}
public interface IVehicle
{
void DisplayInfo();
}
Public Interface IVehicle
Sub DisplayInfo()
End Interface
public class Car : IVehicle
{
public void DisplayInfo()
{
Console.WriteLine("This is a Car.");
}
}
public class Truck : IVehicle
{
public void DisplayInfo()
{
Console.WriteLine("This is a Truck.");
}
}
public class Car : IVehicle
{
public void DisplayInfo()
{
Console.WriteLine("This is a Car.");
}
}
public class Truck : IVehicle
{
public void DisplayInfo()
{
Console.WriteLine("This is a Truck.");
}
}
Public Class Car
Implements IVehicle
Public Sub DisplayInfo()
Console.WriteLine("This is a Car.")
End Sub
End Class
Public Class Truck
Implements IVehicle
Public Sub DisplayInfo()
Console.WriteLine("This is a Truck.")
End Sub
End Class
public abstract class VehicleFactory
{
public abstract IVehicle CreateVehicle(string type);
}
public abstract class VehicleFactory
{
public abstract IVehicle CreateVehicle(string type);
}
Public MustInherit Class VehicleFactory
Public MustOverride Function CreateVehicle(ByVal type As String) As IVehicle
End Class
public class ConcreteVehicleFactory : VehicleFactory
{
public override IVehicle CreateVehicle(string type)
{
switch (type.ToLower())
{
case "car": return new Car();
case "truck": return new Truck();
default: throw new ArgumentException("Invalid vehicle type");
}
}
}
public class ConcreteVehicleFactory : VehicleFactory
{
public override IVehicle CreateVehicle(string 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
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 Class
class Program
{
static void Main(string [] args)
{
// create objects
VehicleFactory factory = new ConcreteVehicleFactory();
IVehicle car = factory.CreateVehicle("car");
car.DisplayInfo();
IVehicle truck = factory.CreateVehicle("truck");
truck.DisplayInfo();
}
}
class Program
{
static void Main(string [] args)
{
// create objects
VehicleFactory factory = new ConcreteVehicleFactory();
IVehicle car = factory.CreateVehicle("car");
car.DisplayInfo();
IVehicle truck = factory.CreateVehicle("truck");
truck.DisplayInfo();
}
}
Friend Class Program
Shared Sub Main(ByVal args() As String)
' create objects
Dim factory As VehicleFactory = New ConcreteVehicleFactory()
Dim car As IVehicle = factory.CreateVehicle("car")
car.DisplayInfo()
Dim truck As IVehicle = factory.CreateVehicle("truck")
truck.DisplayInfo()
End Sub
End Class
在上述範例中,VehicleFactory 類別作為抽象創建者,而 ConcreteVehicleFactory 類別是具體創建者,實作了工廠方法 CreateVehicle。 此方法根據其接收的輸入決定創建哪種類型的車輛。 然後客戶端代碼使用工廠創建不同車輛的實例,從而促進對象創建邏輯與客戶端代碼之間的低耦合。
工廠模式在複雜系統中提供了幾個優勢:
IronPDF 是一個為 .NET 平台設計的庫,幫助開發人員輕鬆創建、編輯和操作直接從HTML生成PDF文件CSS、圖像和JavaScript,而無需深入研究複雜的PDF生成API。它的主要吸引力在於其利用基於Chrome的渲染引擎,能夠快速且高度準確地將網絡內容轉換為PDF文件。
主要功能包括從 HTML 字串或 URL 生成 PDF、即時將網頁渲染為 PDF,以及與表單應用程式、伺服器應用程式和安全內聯網等配合使用的能力。 其性能經過優化以提升效率,具備非同步操作、自定義日誌記錄的能力,並提供詳盡的文檔幫助您快速入門。
為了說明如何將IronPDF與工廠模式整合,讓我們來創建一個簡化的範例。 工廠模式是一種類型的創建型設計模式,它提供了一種在超類中創建具體產品或對象的方法,允許子類修改所生成的特定對象。 這非常適合根據特定需求創建不同類型的 PDF 文件,例如從 HTML 字串、URL 或檔案生成。
我們將建立一個名為 IPdfCreator 的接口,定義一個用於創建 PDF 的方法,然後實現不同的工廠類,使用 IronPDF 以各種方式創建 PDF。
此介面宣告所有具體工廠都將實作的 CreatePdf 方法。
public interface IPdfCreator
{
void CreatePdf(string source);
}
public interface IPdfCreator
{
void CreatePdf(string source);
}
Public Interface IPdfCreator
Sub CreatePdf(ByVal source As String)
End Interface
在這裡,我們定義了兩個 IPdfCreator 的具體實現方案:一個用於從 HTML 字串建立 PDF,另一個從 URL 建立 PDF。
// public class
public class HtmlStringPdfCreator : IPdfCreator
{
public void CreatePdf(string htmlString)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("HtmlStringPdf.pdf");
}
}
public class UrlPdfCreator : IPdfCreator
{
public void CreatePdf(string url)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("UrlPdf.pdf");
}
}
// public class
public class HtmlStringPdfCreator : IPdfCreator
{
public void CreatePdf(string htmlString)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("HtmlStringPdf.pdf");
}
}
public class UrlPdfCreator : IPdfCreator
{
public void CreatePdf(string url)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("UrlPdf.pdf");
}
}
' public class
Public Class HtmlStringPdfCreator
Implements IPdfCreator
Public Sub CreatePdf(ByVal htmlString As String)
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
pdf.SaveAs("HtmlStringPdf.pdf")
End Sub
End Class
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 Class
在您的應用程式中,您現在可以使用這些工廠從不同的來源創建 PDF 文件,而無需擔心 PDF 創建過程的細節。
class Program
{
static void Main(string [] args)
{
License.LicenseKey = "License-Key";
IPdfCreator htmlPdfCreator = new HtmlStringPdfCreator();
htmlPdfCreator.CreatePdf("<h1>Hello, World!</h1>");
IPdfCreator urlPdfCreator = new UrlPdfCreator();
urlPdfCreator.CreatePdf("http://example.com");
}
}
class Program
{
static void Main(string [] args)
{
License.LicenseKey = "License-Key";
IPdfCreator htmlPdfCreator = new HtmlStringPdfCreator();
htmlPdfCreator.CreatePdf("<h1>Hello, World!</h1>");
IPdfCreator urlPdfCreator = new UrlPdfCreator();
urlPdfCreator.CreatePdf("http://example.com");
}
}
Friend Class Program
Shared Sub Main(ByVal args() As String)
License.LicenseKey = "License-Key"
Dim htmlPdfCreator As IPdfCreator = New HtmlStringPdfCreator()
htmlPdfCreator.CreatePdf("<h1>Hello, World!</h1>")
Dim urlPdfCreator As IPdfCreator = New UrlPdfCreator()
urlPdfCreator.CreatePdf("http://example.com")
End Sub
End Class
在此設定中,HtmlStringPdfCreator 和 UrlPdfCreator 是生成 PDF 的具體工廠。 作為客戶的Program類使用這些工廠,而不需要了解如何從HTML字符串或URL生成PDF的細節。 這種方法提供了靈活性,因為您可以引入創建 PDF 的新方法。(例如,來自檔案或資料流)只需添加更多實現 IPdfCreator 介面的工廠,遵循物件導向設計的開放/封閉原則。
以下截圖是程式碼的輸出:
C# 中的工廠模式提供了一個管理物件創建的框架,使軟體設計更具可維護性和擴展性。 通過使用具體類別來實現抽象工廠並委派創建邏輯,開發人員可以創建更易於適應和擴展的系統。 無論是處理幾個類別還是具有複雜相依性的系統,工廠模式都提供了一種結構化的方法來精確地創建類別物件。 它在需要根據用戶輸入、配置或應用程式狀態而改變要創建的物件類型的情境中特別有利。
IronPDF 提供一個IronPDF 免費試用開始使用,授權選項價格從 $749 起,適合希望將 PDF 功能整合到其 .NET 應用程序中的開發人員。