.NET 幫助

工廠模式 C#(如何為開發者工作)

發佈 2024年4月29日
分享:

C# 中的工廠模式是一種結構性方法,屬於設計模式的類別。 工廠方法設計模式在 C# 中旨在解決創建對象時,不必指定將被創建的對象的具體創建類。

基本上,工厂模式通过将对象创建委托给一个特定的类,即工厂类来处理。 這使系統更加靈活且易於管理,特別是在引入新類型的對象時,因為工廠類處理對象的創建過程,從而減少對具體類的依賴。 讓我們深入探討工廠方法模式,一種在 C# 中的創建型設計模式的實現和使用方法。 我們將探討IronPDF PDF 生成庫以後。

基本工厂方法模式结构

工廠方法模式的核心理念是在設計出一個通用介面以創建對象的同時,允許子類改變它們創建的對象類型。 此模式涉及幾個關鍵組件:抽象工廠模式、創建型設計模式、工廠設計模式、現有程式碼、基本工廠模式、抽象工廠模式、實際案例、具體產品、相關或相依物件和具體類別。

  • 產品介面:指定工廠方法創建的對象結構。
  • 具體產品類別:實現產品介面。
  • Creator 類別(抽象類別創建器):宣告工廠方法,其返回產品介面的物件。
  • 具體創建者:修改工廠方法以提供具體產品的實例。

範例:車輛製造廠

考慮一個情境,我們有不同類型的車輛,例如汽車和卡車。 我們將使用工廠模式來創建一個車輛工廠,該工廠可以根據用戶輸入或配置文件創建不同類型的車輛。

第 1 步:定義產品介面

public interface IVehicle
{
    void DisplayInfo();
}
public interface IVehicle
{
    void DisplayInfo();
}
Public Interface IVehicle
	Sub DisplayInfo()
End Interface
VB   C#

步驟二:實現具體產品

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
VB   C#

步驟3:創建抽象創建者類別

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
VB   C#

步驟4:實現具體創建者

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
VB   C#

步驟 5:客戶端代碼使用

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
VB   C#

在上述範例中,VehicleFactory 類別作為抽象創建者,而 ConcreteVehicleFactory 類別是具體創建者,實作了工廠方法 CreateVehicle。 此方法根據其接收的輸入決定創建哪種類型的車輛。 然後客戶端代碼使用工廠創建不同車輛的實例,從而促進對象創建邏輯與客戶端代碼之間的低耦合。

工廠模式 C#(它如何為開發者工作):圖 1 - 工廠設計模式輸出

使用工廠模式的優點

工廠模式在複雜系統中提供了幾個優勢:

  • 鬆散耦合:客戶端代碼與介面或抽象類互動,而不是與具體產品類互動。 這樣的設計結果更加靈活且更易於修改。
  • 可重用的面向对象软件:工厂模式促进代码的重用,因为它将对象创建逻辑与系统分离,使系统更易于维护和扩展。
  • 物件創建的靈活性:工廠方法允許不同的實現方式來創建物件,這些實現方式可以在運行時進行選擇。這在需要的物件類型可根據外部因素變化的情況中特別有用。

IronPDF:.NET PDF 解決方案

工廠模式 C#(開發人員如何使用):圖 2 - IronPDF

IronPDF 是一個為 .NET 平台設計的庫,幫助開發人員輕鬆創建、編輯和操作直接從HTML生成PDF文件CSS、圖像和JavaScript,而無需深入研究複雜的PDF生成API。它的主要吸引力在於其利用基於Chrome的渲染引擎,能夠快速且高度準確地將網絡內容轉換為PDF文件。

主要功能包括從 HTML 字串或 URL 生成 PDF、即時將網頁渲染為 PDF,以及與表單應用程式、伺服器應用程式和安全內聯網等配合使用的能力。 其性能經過優化以提升效率,具備非同步操作、自定義日誌記錄的能力,並提供詳盡的文檔幫助您快速入門。

範例程式碼

為了說明如何將IronPDF與工廠模式整合,讓我們來創建一個簡化的範例。 工廠模式是一種類型的創建型設計模式,它提供了一種在超類中創建具體產品或對象的方法,允許子類修改所生成的特定對象。 這非常適合根據特定需求創建不同類型的 PDF 文件,例如從 HTML 字串、URL 或檔案生成。

我們將建立一個名為 IPdfCreator 的接口,定義一個用於創建 PDF 的方法,然後實現不同的工廠類,使用 IronPDF 以各種方式創建 PDF。

步驟1:定義 IPdfCreator 介面

此介面宣告所有具體工廠都將實作的 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
VB   C#

步驟 2:實施具體工廠

在這裡,我們定義了兩個 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
VB   C#

步驟 3:使用工廠

在您的應用程式中,您現在可以使用這些工廠從不同的來源創建 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
VB   C#

在此設定中,HtmlStringPdfCreatorUrlPdfCreator 是生成 PDF 的具體工廠。 作為客戶的Program類使用這些工廠,而不需要了解如何從HTML字符串或URL生成PDF的細節。 這種方法提供了靈活性,因為您可以引入創建 PDF 的新方法。(例如,來自檔案或資料流)只需添加更多實現 IPdfCreator 介面的工廠,遵循物件導向設計的開放/封閉原則。

輸出

以下截圖是程式碼的輸出:

工廠模式 C#(對開發人員的工作原理):圖 3 - 工廠設計模式 PDF 輸出

工廠模式 C#(開發人員指南):圖 4 - 基本工廠方法輸出

結論

工廠模式 C#(其對開發人員的運作方式):圖 5 - 許可授權

C# 中的工廠模式提供了一個管理物件創建的框架,使軟體設計更具可維護性和擴展性。 通過使用具體類別來實現抽象工廠並委派創建邏輯,開發人員可以創建更易於適應和擴展的系統。 無論是處理幾個類別還是具有複雜相依性的系統,工廠模式都提供了一種結構化的方法來精確地創建類別物件。 它在需要根據用戶輸入、配置或應用程式狀態而改變要創建的物件類型的情境中特別有利。

IronPDF 提供一個IronPDF 免費試用開始使用,授權選項價格從 $749 起,適合希望將 PDF 功能整合到其 .NET 應用程序中的開發人員。

< 上一頁
如何在 C# 字串中替換字符(適用於開發人員)
下一個 >
C# 四捨五入到小數點後第 2 位(開發人員如何操作)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >