工厂方法模式是一种创建型设计模式,它提供了一种方式来封装对象的实例化过程。在工厂方法模式中,我们通过创建一个接口或抽象类来创建对象,然后让子类决定实例化哪一个类。
工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
工厂方法模式主要应用在以下几个场景:
假设我们有一个日志记录器,它可以记录日志到不同的地方,比如文件或数据库。我们可以使用工厂方法模式来创建不同类型的日志记录器。
C#/// <summary>
/// 日志接口
/// </summary>
public interface ILogger
{
void Log(string message);
}
C#/// <summary>
/// 文件日志
/// </summary>
public class FileLogger:ILogger
{
public void Log(string message)
{
//写文件
}
}
C#/// <summary>
/// Db日志
/// </summary>
public class DbLogger:ILogger
{
public void Log(string message)
{
//写日志到DB
}
}
C#/// <summary>
/// 抽象类
/// </summary>
public abstract class LoggerFactory
{
//工厂抽像方法
public abstract ILogger CreateLogger();
public void Log(string message)
{
ILogger logger = CreateLogger();
logger.Log(message);
}
}
C#/// <summary>
/// 文件日志工厂类
/// </summary>
public class FileLoggerFactory : LoggerFactory
{
public override ILogger CreateLogger()
{
return new FileLogger();
}
}
C#/// <summary>
/// Db日志抽象类
/// </summary>
public class DbLoggerFactory:LoggerFactory
{
public override ILogger CreateLogger()
{
//创建一个写Db日志类
return new DbLogger();
}
}
C#private void btnLogFile_Click(object sender, EventArgs e)
{
//文件日志
LoggerFactory logger=new FileLoggerFactory();
logger.Log("测试日志");
}
private void btnLogDb_Click(object sender, EventArgs e)
{
//数据库志
LoggerFactory logger = new DbLoggerFactory();
logger.Log("测试日志");
}
LoggerFactory
是创建者,它定义了工厂方法 CreateLogger
。FileLoggerFactory
和 DbLoggerFactory
是具体的创建者,它们实现了 CreateLogger
方法来创建 FileLogger
和 DbLogger
。ILogger
是产品,FileLogger
和 DbLogger
是具体的产品。
客户端代码只需要依赖 LoggerFactory
,而无需知道具体的日志记录器是如何被创建的。
在这个例子中,如果我们想要改变日志记录器的类型,我们只需要改变 loggerFactory
的类型,而无需修改其他的代码。
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!