在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`实现类即可,而不需要修改客户端代码。