.NET 幫助

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

發佈 2024年4月29日
分享:

C# 中的工廠模式 是一種結構化的方法,屬於設計模式的範疇。C#中的工廠方法設計模式旨在解決與創建對象相關的問題,而不需要指定將要創建的對象的具體創建者類。

工廠模式主要處理對象的創建,通過委託給一個特定的類(稱為工廠類)。這使得系統在引入新類型對象時更加靈活和容易管理,因為工廠類處理對象的創建過程,減少了對具體類的依賴。讓我們深入探討如何實現和使用工廠方法模式這種C#中的創建型設計模式。我們將探索 IronPDF 庫 以後。

基本工厂方法模式结构

工厂方法模式的核心思想是在定义创建对象的通用接口的同时,允许子类更改它们创建的对象类型。此模式涉及一些关键组件:抽象工厂模式、创建型设计模式、工厂设计模式、现有代码、基本工厂模式、抽象工厂模式、真实世界示例、具体产品、相关或依赖对象和具体类。

  • 产品接口:指定由工厂方法创建的对象的结构。
  • 具体产品类:实现产品接口。
  • 创建者类 (抽象類別創建器)**:聲明工廠方法,該方法返回產品介面的物件。
  • 具體創建者:修改工廠方法以傳遞具體產品的實例。

示例:車輛工廠

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

第 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。其主要吸引力在於其能夠迅速且高精確度地將網頁內容轉換為 PDF 文件,這要歸功於它使用的基於 Chrome 的渲染引擎。

關鍵功能包括從 HTML 字串或 URL 生成 PDF,實時將網頁渲染為 PDF,以及能夠與表單應用程序、伺服器應用程序和安全內聯網合作等。其性能已優化以提高效率,具有異步操作、自定義日誌和全面文件記錄的功能,以幫助您快速入門。

範例代碼

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

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

第一步:定義 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#

第三步:使用工廠

在您的應用程式中,您現在可以使用這些工廠來從不同來源建立 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 提供了一个 免費試用 開始使用,授權選項價格從 $749 起,適合希望將 PDF 功能整合到其 .NET 應用程序中的開發人員。

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

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

免費 NuGet 下載 總下載次數: 10,993,239 查看許可證 >