工厂方法模式
上次写到简单工厂模式。如那里说的,简单工厂模式在新加入一个新产品时候,必须修改工厂类中的代码。工厂方法模式就可以很好的克服简单工厂模式中存在的问题。
工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂方法模式又简称为工厂
模式(Factory Pattern)。
工厂方法模式可以克服这个问题,废话不多,上代码~~~我很懒,没画UML图,呵呵,凑合着看吧。。。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LoggerFactory
{
class Program
{
static void Main(string[] args)
{
LoggerFactory lf;
Logger logger;
lf = new FileLoggerFactory();//选择用哪个类去实例化,可以在配置文件中设置。
logger = lf.createLogger();
logger.writeLog();
Console.WriteLine("------------------------------");
lf = new DataBaseLoggerFactory();//选择用哪个类去实例化,可以在配置文件中设置。
logger = lf.createLogger();
logger.writeLog();
Console.ReadKey();
}
}
/// <summary>
/// Logger记录的接口
/// </summary>
interface Logger
{
void writeLog();
}
/// <summary>
/// 文件记录Logger
/// </summary>
class FileLogger : Logger
{
public void writeLog()
{
Console.WriteLine("文件日志记录。");
}
}
/// <summary>
/// DB记录Logger
/// </summary>
class DataBaseLogger : Logger
{
public void writeLog()
{
Console.WriteLine("DB日志记录。");
}
}
/// <summary>
/// 抽象工厂类
/// </summary>
interface LoggerFactory
{
Logger createLogger();
}
/// <summary>
/// 具体的文件Logger工厂类
/// </summary>
class FileLoggerFactory : LoggerFactory
{
public Logger createLogger()
{
return new FileLogger();
}
}
/// <summary>
/// 具体的DBLogger工厂类
/// </summary>
class DataBaseLoggerFactory : LoggerFactory
{
public Logger createLogger()
{
return new DataBaseLogger();
}
}
}