在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
"(《世界人权宣言》)C# 中的工厂模式设计模式是一种结构方法,属于设计模式的范畴。 工厂方法设计模式在C#中旨在解决与创建对象相关的问题,而无需指定将要创建的对象的确切创建者类。
从本质上讲,工厂模式是将对象创建委托给一个特定的类,即工厂类。 工厂类可以处理对象的创建过程,减少对具体类的依赖,从而使系统更灵活、更易于管理,尤其是在引入新类型对象时。 让我们深入了解工厂方法模式这种 C# 中的创建设计模式如何实现和使用。 我们将探索IronPDF PDF 生成库稍后。
工厂方法模式背后的核心思想是定义一个用于创建对象的通用接口,同时允许子类改变所创建对象的类型。 该模式涉及几个关键部分:抽象工厂模式、创建设计模式、工厂设计模式、现有代码、基本工厂模式、抽象工厂模式、实际示例、具体产品、相关或依赖对象以及具体类。
假设我们有不同类型的汽车,如轿车和卡车。 我们将使用工厂模式创建一个车辆工厂,它可以根据用户输入或配置文件创建不同类型的车辆。
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 平台设计的一个库,可帮助开发人员轻松创建、编辑和操作从 HTML 直接生成 PDF 文件该工具可用于生成 PDF、CSS、图像和 JavaScript,而无需深入研究复杂的 PDF 生成 API。它的主要吸引力在于,由于使用了基于 Chrome 浏览器的渲染引擎,它能够快速、高精度地将网页内容转换为 PDF 文档。
主要功能包括从 HTML 字符串或 URL 生成 PDF、将网页即时渲染为 PDF,以及与表单应用程序、服务器应用程序和安全内联网等协同工作的能力。 它的性能经过优化,具有异步操作、自定义日志和大量文档等功能,可帮助您快速上手,提高效率。
为了说明 IronPdf 如何与工厂模式集成,让我们创建一个简化的示例。 工厂模式是一种创建设计模式,它提供了一种在超类中创建具体产品或对象的方法,允许子类修改正在生成的特定对象。 这非常适合根据特定需求创建不同类型的 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 提供一个免费试用 IronPDF许可证选项从 749 美元起,适合希望将 PDF 功能集成到其 .NET 应用程序中的开发人员。