IRONSOFTWAREHOME
开发者更新

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。 该方法根据所接收的输入决定要创建的车辆类型。 然后客户代码使用工厂创建不同车辆的实例,促进客户端代码与对象创建逻辑之间的松耦合。

Factory Pattern C#(开发者如何使用):图1 - 工厂设计模式输出

使用工厂模式的优势

工厂模式提供了多个优势,尤其是在复杂系统中:

-**松耦合:**客户端代码与接口或抽象类交互,而不是与具体产品类交互。 这导致设计更灵活,更易于修改。 -**可重用的面向对象软件:**工厂模式促进了代码的重用,因为它将对象创建逻辑与系统分离,使系统更容易维护和扩展。 -**对象创建的灵活性:**工厂方法允许使用不同的实现方式来创建对象,并且可以在运行时选择使用哪种方式。这在所需对象类型可能因外部因素而异的场景中尤其有用。

IronPDF:.NET PDF 解决方案

Factory Pattern C#(开发者如何使用):图2 - IronPDF

IronPDF 是一个为 .NET 平台设计的库,帮助开发人员轻松创建、编辑和操作PDF 文件直接从 HTML、CSS、图像和 JavaScript 无需深入了解复杂的 PDF 生成 API。它的主要吸引力在于其能够迅速且高精度地将网页内容转换为 PDF 文档,得益于它使用基于 Chrome 的渲染引擎。

主要功能包括从 HTML 字符串或 URL 生成 PDF,实时将网页渲染为 PDF,以及与应用程序、服务器应用程序和安全内联网等各种程序协作的能力。 其性能经过优化以提高效率,具备异步操作、自定义日志记录和丰富的文档以帮助您快速入门。

IronPDF在HTML到PDF转换方面表现出色,确保精确保留原始布局和样式。 它非常适合从基于Web的内容中创建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类作为客户端,使用这些工厂而不必了解如何从 HTML 字符串或 URL 生成 PDF 的详细信息。 这种方法提供了灵活性,因为您可以简单地通过添加实现 IPdfCreator接口的工厂来引入新的 PDF 创建方式(例如文件或流),遵循面向对象设计的开闭原则。

输出

以下截图是代码的输出:

Factory Pattern C#(开发者如何使用):图3 - 工厂设计模式PDF输出

Factory Pattern C#(开发者如何使用):图4 - 基础工厂方法输出

结论

C# 中的工厂模式提供了一个管理对象创建的框架,使软件设计更易于维护和扩展。 通过使用具体类来实现一个抽象工厂并委托创建逻辑,开发人员可以创建更易于适应和扩展的系统。 无论是处理少量类还是复杂依赖的系统,工厂模式都提供了一种有组织的方法来精确类对象的创建。 对于对象类型可以根据用户输入、配置或应用程序状态变化的场景,它特别有利。

IronPDF提供IronPDF的免费试用以便开始,许可选项从liteLicense起,适合希望将PDF功能集成到其.NET应用程序中的开发者。

Jacob Mellor,Team Iron 的首席技术官
首席技术官

Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥。

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

OR
bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥。
无需信用卡或创建账户
C# 用于 PDF 的 NuGet 库
通过 NuGet 安装

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解决方案资源管理器中,右键点击引用,管理 NuGet 包
  2. 选择浏览并搜索 “IronPDF”
  3. 选择包并安装
C# PDF DLL
下载 DLL

版本: 2026.9

或在此处下载 Windows 安装程序。

  1. 下载并解压 IronPDF 到您的解决方案目录中的 ~/Libs 之类的位置
  2. 在 Visual Studio 解决方案资源管理器中,右键点击引用。选择浏览,“IronPDF.dll”

$999 起