.NET 幫助

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

喬迪·巴迪亞
喬迪·巴迪亞
2024年4月29日
分享:

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

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

基本工厂方法模式结构

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

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

範例:車輛製造廠

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

第 1 步:定義產品介面

public interface IVehicle
{
    void DisplayInfo();
}
public interface IVehicle
{
    void DisplayInfo();
}

步驟二:實現具體產品

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

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

public abstract class VehicleFactory
{
    public abstract IVehicle CreateVehicle(string type);
}
public abstract class VehicleFactory
{
    public abstract IVehicle CreateVehicle(string type);
}

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

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

在上述範例中,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 擅長於HTML轉PDF轉換,確保準確保留原始佈局和樣式。 它非常適合從基於網絡的內容(如報告、發票和文檔)創建PDF。 IronPDF 支援 HTML 檔案、URL 和原始 HTML 字串,輕鬆製作高品質的 PDF 文件。

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        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");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        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
{
    void CreatePdf(string source);
}
public interface IPdfCreator
{
    void CreatePdf(string source);
}

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

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

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

輸出

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

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

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

結論

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

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

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

喬迪·巴迪亞
軟體工程師
Jordi 最擅長 Python、C# 和 C++,當他不在 Iron Software 發揮技能時,他會進行遊戲編程。他負責產品測試、產品開發和研究,為持續產品改進增添了巨大的價值。多樣化的經驗使他感到挑戰和投入,他說這是與 Iron Software 合作的最喜歡的方面之一。Jordi 在佛羅里達州邁阿密長大,並在佛羅里達大學學習計算機科學和統計學。
< 上一頁
如何在 C# 字串中替換字符(適用於開發人員)
下一個 >
C# 四捨五入到小數點後第 2 位(開發人員如何操作)