c#使用简单工厂模式实现生成html文件的封装类分享


在C#中,使用简单工厂模式来生成HTML文件是一个常见的设计模式应用示例。简单工厂模式的核心是定义一个工厂类,用于创建不同类的实例,而无需在客户端代码中指定具体的类。

以下是一个使用简单工厂模式来生成HTML文件的示例。这个示例将包含一个简单的HTML文件生成接口、几个具体的HTML文件生成类(例如用于生成标题、段落等),以及一个工厂类来根据输入创建对应的HTML元素生成器。

首先,定义一个`IHtmlElement`接口,所有的HTML元素生成器都将实现这个接口:


public interface IHtmlElement
{
    string GenerateHtml();
}

然后,创建几个实现了`IHtmlElement`接口的类,比如`HtmlHeader`和`HtmlParagraph`:


public class HtmlHeader : IHtmlElement
{
    private string _content;

    public HtmlHeader(string content)
    {
        _content = content;
    }

    public string GenerateHtml()
    {
        return $"<h1>{_content}</h1>";
    }
}

public class HtmlParagraph : IHtmlElement
{
    private string _content;

    public HtmlParagraph(string content)
    {
        _content = content;
    }

    public string GenerateHtml()
    {
        return $"<p>{_content}</p>";
    }
}

接下来,定义一个工厂类`HtmlFactory`,它负责根据传入的类型信息(或任何其他条件)来创建对应的HTML元素生成器实例:


public class HtmlFactory
{
    public static IHtmlElement CreateHtmlElement(string type, string content)
    {
        switch (type.ToLower())
        {
            case "header":
                return new HtmlHeader(content);
            case "paragraph":
                return new HtmlParagraph(content);
            default:
                throw new ArgumentException("Unsupported HTML element type.");
        }
    }
}

最后,你可以在客户端代码中这样使用它:


class Program
{
    static void Main(string[] args)
    {
        var header = HtmlFactory.CreateHtmlElement("header", "This is a header");
        var paragraph = HtmlFactory.CreateHtmlElement("paragraph", "This is a paragraph.");

        Console.WriteLine(header.GenerateHtml());
        Console.WriteLine(paragraph.GenerateHtml());
    }
}

在这个例子中,`HtmlFactory`类充当了简单工厂的角色,它根据传入的类型字符串("header"或"paragraph")来决定创建哪个具体的HTML元素生成器实例。这样,如果将来需要添加新的HTML元素类型,只需要扩展`HtmlFactory`中的`switch`语句和创建新的`IHtmlElement`实现类即可,而不需要修改客户端代码。