1.概述:
–>定义一个用于创建对象的工厂接口,让工厂子类决定将哪一个产品类实例化。此模式让一个产品类的实例化延迟到工厂子类。
2.实现:
–>先定义一个抽象产品类,包含产品类的公共代码
–>再定义一个抽象工厂类,用一个方法返回一个具体的产品类
–>分别实现具体的产品类,和对应的具体工厂类
3.代码:
//抽象产品类
internal interface Logger
{
void WriteLog();
}
//抽象工厂
internal interface LoggerFactory
{
Logger CreateLogger();
}
//具体产品类
internal class DataBaseLogger : Logger
{
public DataBaseLogger()
{
Console.WriteLine("数据库日志创建");
}
public void WriteLog()
{
Console.WriteLine("数据库日志写入");
}
}
//具体工厂类
internal class DataBaseLoggerFactory : LoggerFactory
{
public DataBaseLoggerFactory()
{
}
public static Logger GetLogger()
{
DataBaseLoggerFactory db = new DataBaseLoggerFactory();
return db.CreateLogger();
}
public Logger CreateLogger()
{
return new DataBaseLogger();
}
}
//具体产品类
internal class FileLogger : Logger
{
public FileLogger()
{
Console.WriteLine("文件日志创建");
}
public void WriteLog()
{
Console.WriteLine("文件日志写入中");
}
}
//具体工厂类
internal class FileLoggerFactory : LoggerFactory
{
public FileLoggerFactory()
{
}
public Logger CreateLogger()
{
return new FileLogger();
}
public Logger GetLogger()
{
FileLoggerFactory ff = new FileLoggerFactory();
return ff.CreateLogger();
}
}
4.工厂方法的隐藏:
–>我们可以在抽象工厂类中添加调用产品类的业务方法,让客户直接调用工厂中的方法就可以不需要创建产品对象。
internal abstract class LoggerFactory
{
//客户端就可以用抽象工厂类的实例来调用产品类的业务方法
public void WriteLog()
{
Logger logger = this.CreateLogger();
logger.WriteLog();
}
public Logger CreateLogger();
}