在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
"(《世界人权宣言》) C# 中的工厂模式 是一种结构方法,属于设计模式的范畴。C# 中的工厂方法设计模式旨在解决与创建对象相关的问题,而无需指定将要创建对象的确切创建者类。
从本质上讲,工厂模式通过将对象创建委托给一个特定的类(即工厂类)来处理。这使得系统更灵活、更易于管理,尤其是在引入新类型对象时,因为工厂类处理对象创建过程,减少了对具体类的依赖。让我们深入探讨如何实现和使用工厂方法模式,这是 C# 中的一种创建设计模式。我们将探讨 IronPDF 库 稍后。
工厂方法模式的核心思想是为创建对象定义一个通用接口,同时允许子类改变所创建对象的类型。这种模式涉及几个关键部分:抽象工厂模式、创建设计模式、工厂设计模式、现有代码、基本工厂模式、抽象工厂模式、实际示例、具体产品、相关或依赖对象以及具体类。
假设我们有汽车和卡车等不同类型的车辆。我们将使用工厂模式创建一个车辆工厂,它可以根据用户输入或配置文件创建不同类型的车辆。
public interface IVehicle
{
void DisplayInfo();
}
public interface IVehicle
{
void DisplayInfo();
}
Public Interface IVehicle
Sub DisplayInfo()
End Interface
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
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
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
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
在上例中,VehicleFactory 类是抽象创建器,ConcreteVehicleFactory 类是具体创建器,它实现了工厂方法 CreateVehicle。该方法根据接收到的输入决定创建哪种类型的车辆。然后,客户端代码使用该工厂创建不同车辆的实例,从而促进对象创建逻辑与客户端代码之间的松散耦合。
工厂模式有几个优点,尤其是在复杂系统中:
IronPDF 是一个专为 .NET 平台设计的库,可帮助开发人员轻松创建、编辑和操作 IronPDF。 从 HTML 直接生成 PDF 文件它可以将网页内容、CSS、图像和 JavaScript 转换为 PDF 文档,而无需深入研究复杂的 PDF 生成 API。它的主要吸引力在于,由于使用了基于 Chrome 浏览器的渲染引擎,它能快速、高精度地将网页内容转换为 PDF 文档。
其主要功能包括从 HTML 字符串或 URL 生成 PDF、将网页即时渲染为 PDF,以及与表单应用程序、服务器应用程序和安全内联网等协同工作的能力。其性能经过优化,具有异步操作、自定义日志和大量文档等功能,可帮助您快速上手,提高效率。
为了说明 IronPDF 如何与工厂模式集成,让我们创建一个简化的示例。工厂模式(Factory Pattern)是一种创建设计模式,它提供了一种在超类中创建具体产品或对象的方法,允许子类修改正在生成的特定对象。这非常适合根据特定需求创建不同类型的 PDF 文档,例如从 HTML 字符串、URL 或文件创建 PDF 文档。
我们将创建一个名为 IPdfCreator 的接口,定义创建 PDF 的方法,然后使用 IronPDF 实现不同的工厂类,以各种方式创建 PDF。
该接口声明了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
这里我们定义了 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
现在,您可以在应用程序中使用这些工厂从不同来源创建 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
在此设置中,HtmlStringPdfCreator 和 UrlPdfCreator 是生成 PDF 的具体工厂。作为客户端的程序类使用这些工厂,而无需了解如何从 HTML 字符串或 URL 生成 PDF 的复杂细节。这种方法提供了灵活性,因为您可以引入创建 PDF 的新方法 (例如,从文件或数据流中提取) 只需按照面向对象设计的开放/封闭原则,添加更多实现 IPdfCreator 接口的工厂即可。
以下截图是代码的输出结果:
C# 中的工厂模式提供了一个管理对象创建的框架,使软件设计更具可维护性和可扩展性。通过使用具体类来实现抽象工厂和委托创建逻辑,开发人员可以创建更易于调整和扩展的系统。无论是处理少数几个类还是具有复杂依赖关系的系统,工厂模式都能提供一种结构化的方法来创建具体的类对象。在需要创建的对象类型会根据用户输入、配置或应用程序状态而变化的情况下,工厂模式尤其有用。
IronPDF 提供了 免费试用 许可证选项从 749 美元起,适合希望将 PDF 功能集成到其 .NET 应用程序中的开发人员。