開發者更新

Factory Pattern C#(對於開發者的運行原理)

Jacob Mellor,首席技術官 @ Team Iron
Jacob Mellor
Updated: 2026年4月23日

在C#的工廠模式是屬於設計模式類別的一種結構方法。 C#中的工廠方法設計模式旨在解決不需要指定將要建立的物件的具體建立者類的情況下建立物件相關的問題。

基本上,工廠模式通過將物件建立委託給特定的類(即工廠類)來處理物件建立。 這使系統在引入新型別物件時更具靈活性和易於管理,因為工廠類處理物件建立過程,減少對具體類的依賴。 讓我們深入了解如何實現並使用C#中工廠方法模式,一種建立型設計模式。 稍後我們將探索IronPDF PDF生成程式庫。

基本的工廠方法模式結構

工廠方法模式的核心思想是定義一個建立物件的通用介面,同時允許子類更改它們建立的物件型別。 此模式涉及幾個關鍵組件:

  • 產品介面:指定工廠方法建立的物件的結構。
  • 具體產品類:實現產品介面。
  • 建立者類(抽象類建立者):聲明工廠方法,該方法返回產品介面的一個物件。
  • 具體建立者:修改工廠方法以提供具體產品的實例。

範例:車輛工廠

考慮一個場景,我們有不同型別的車輛,如汽車和卡車。 我們將使用工廠模式建立一個車輛工廠,該工廠可以根據使用者輸入或配置文件建立不同型別的車輛。

步驟1:定義產品介面

public interface IVehicle
{
    // Method to display information about the vehicle
    void DisplayInfo();
}

步驟2:實現具體產品

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.");
    }
}

步驟3:建立抽象建立者類

public abstract class VehicleFactory
{
    // Factory Method to create a vehicle instance
    public abstract IVehicle CreateVehicle(string type);
}

步驟4:實現具體建立者

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");
        }
    }
}

步驟5:客戶端程式碼使用

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();
    }
}

在上述範例中,VehicleFactory類充當抽象建立者,而ConcreteVehicleFactory類為實現工廠方法CreateVehicle的具體建立者。 此方法根據接收到的輸入決定生成哪種型別的車輛。 然後客戶端程式碼使用工廠建立不同車輛的實例,促進了物件建立邏輯與客戶端程式碼之間的鬆耦合。

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

使用工廠模式的優勢

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

  • 鬆耦合:客戶端程式碼與介面或抽象類交互,而不是具體產品類。 這導致設計更加靈活且易於修改。
  • 可重用的物件導向軟體:工廠模式促進程式碼重用,它將物件建立邏輯與系統分開,使系統更易於維護和擴展。
  • 物件建立的靈活性:工廠方法允許不同實現來建立物件,可以在運行時選擇使用,這在物件型別根據外部因素而變化的場景中尤其有用。

IronPDF:.NET PDF解決方案

工廠模式 C#(開發者如何運作):圖2 - IronPDF

IronPDF是一個專為.NET平台設計的程式庫,幫助開發者輕鬆從HTML、CSS、圖片和JavaScript直接建立、編輯和操作PDF文件,而不需要深入了解複雜的PDF生成API。其主要吸引力在於能夠快速且高精度地將網頁內容轉換為PDF文件,因為其使用了基於Chrome的渲染引擎。

其主要特點包括從HTML字串或URL生成PDF、將網頁即時渲染為PDF,並能夠與視窗應用程式、伺服器應用程式和安全內聯網等一起工作。 其性能對於效率進行了優化,具有非同步操作、自訂記錄和豐富的文件以幫助您快速入門。

IronPDF在HTML到PDF的轉換中表現出色,確保精確保留原始佈局和樣式。 它非常適合從基於網路的內容(如報告、發票和文件)建立PDF文件。 用於HTML文件、URL和原始HTML字串的支持,IronPDF可以輕鬆生成高品質的PDF文件。

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");
    }
}

程式碼範例

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

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

步驟1:定義IPdfCreator介面

此介面聲明了所有具體工廠都將實現的CreatePdf方法。

public interface IPdfCreator
{
    // Method responsible for creating a PDF
    void CreatePdf(string source);
}

步驟2:實現具體工廠

在這裡,我們定義了兩個IPdfCreator的具體實現:一個是從HTML字串建立PDF,另一個是從URL建立PDF。

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");
    }
}

步驟3:使用工廠

在您的應用程式中,您現在可以使用這些工廠從不同來源建立PDF文件,而無需擔心PDF建立過程的細節。

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");
    }
}

在這種設定中,HtmlStringPdfCreator和UrlPdfCreator是建立PDF的具體工廠。 Program類充當客戶端,使用這些工廠而無需知道PDF是如何從HTML字串或URL生成的複雜細節。 這種方法提供了靈活性,因為您可以通過新增實現了IPdfCreator介面的更多工廠引入新的PDF建立方式(例如,從文件或流中),遵循物件導向設計的開放/封閉原則。

輸出

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

工廠模式 C#(開發者如何運作):圖3 - 工廠設計模式PDF輸出

工廠模式 C#(開發者如何運作):圖4 - 基本工廠方法輸出

結論

C#中的工廠模式提供了一個管理物件建立的框架,使軟體設計更易於維護和擴展。 通過使用具體類來實現抽象工廠並委派建立邏輯,開發者可以建立更易於適應和擴展的系統。 無論是處理少量類還是具有復雜依賴性的系統,工廠模式提供了一種結構化的方法來精確建立類物件。 當要建立的物件型別可以根據使用者輸入、配置或應用程式狀態而變化時,這尤其有益。

IronPDF提供IronPDF的免費試用以便開始,許可選項從$999開始,適合尋求在其.NET應用程式中整合PDF功能的開發者。

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

閱讀更多

相關文章