工厂方法模式是一种类创建型模式.在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类.
工厂方法模式包含以下4个角色:
(1)抽象产品:它是定义产品的接口.
(2)具体产品:它是实现抽象产品的接口的类.
(3)抽象工厂:在抽象工厂类或接口中声明了工厂方法,用于返回一个产品.抽象工厂是工厂方法模式的核心,所有创建对象的工厂类都必须实现该接口.
(4)具体工厂:它是抽象工厂类的子类.
以下为一个实例的演示代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
interface Logger//抽象产品接口
{
void WriteLog();
}
class DatabaseLogger : Logger//数据库日志记录类
{
public void WriteLog()
{
Console.WriteLine("数据库日志记录");
}
}
class FileLogger : Logger//文件日志记录类
{
public void WriteLog()
{
Console.WriteLine("文件日志记录");
}
}
interface LoggerFactory//抽象工厂接口
{
Logger CreateLogger();//抽象工厂方法
}
class DatabaseLoggerFactory : LoggerFactory//数据库日志记录工厂类
{
public Logger CreateLogger()
{
Logger logger = new DatabaseLogger();
return logger;
}
}
class FileLoggerFactory : LoggerFactory//文件日志记录工厂类
{
public Logger CreateLogger()
{
Logger logger = new FileLogger();
return logger;
}
}
class Program
{
static void Main(string[] args)
{
LoggerFactory factory;//定义抽象工厂类对象引用;
Logger logger;//定义产品抽象类对象引用;
factory = new FileLoggerFactory();//创建文件日志记录工厂对象;
logger = factory.CreateLogger();//创建文件日志记录对象
logger.WriteLog();
factory = new DatabaseLoggerFactory();//创建数据库日志记录工厂对象;
logger = factory.CreateLogger();//创建数据库日志记录对象
logger.WriteLog();
Console.ReadKey();
}
}
}
运行结果如下:
