工厂方法模式是一种类创建型模式.在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类.
工厂方法模式包含以下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(); } } }
运行结果如下: