1、类图
2、建项目就不一一说了,请见设计模式之简单工厂
……………………………………
3、 新建Logger接口:日志记录器接口,充当抽象产品角色。
namespace FactoryMethodSample
{
interface Logger
{
void WriteLog();
}
}
4、新建DatabaseLogger类:数据库日志记录器,充当具体产品角色。
using System;
namespace FactoryMethodSample
{
class DatabaseLogger : Logger
{
public void WriteLog()
{
Console.WriteLine("数据库日志记录。");
}
}
}
5、 新建FileLogger类:文件日志金路器,充当具体产品角色。
using System;
namespace FactoryMethodSample
{
class FileLogger : Logger
{
public void WriteLog()
{
Console.WriteLine("文件日志记录。");
}
}
}
6、 新建LoggerFactory接口;日志记录器工厂接口,充当抽象工厂角色。
namespace FactoryMethodSample
{
interface LoggerFactory
{
Logger CreateLogger();
}
}
7、新建DatabaseLoggerFactory类:数据库日志记录器工厂类,充当具体工厂角色。
namespace FactoryMethodSample
{
class DatabaseLoggerFactory : LoggerFactory
{
public Logger CreateLogger()
{
//连接数据库,代码省略
//创建数据库日志记录器对象
Logger logger = new DatabaseLogger();
//初始化数据库日志记录器,代码省略
return logger;
}
}
}
8、 新建FileLoggerFactory类:文件日志记录器工厂类,充当具体工厂角色。
namespace FactoryMethodSample
{
class FileLoggerFactory : LoggerFactory
{
public Logger CreateLogger()
{
//创建文件日志记录器对象
Logger logger = new FileLogger();
//创建文件,代码省略
return logger;
}
}
}
9、客服端
using System;
using System.Configuration;
using System.Reflection;
namespace FactoryMethodSample
{
class Program
{
static void Main(string[] args)
{
/*
LoggerFactory factory;
Logger logger;
factory = new FileLoggerFactory(); //可引入配置文件实现
logger = factory.CreateLogger();
logger.WriteLog();
*/
LoggerFactory factory;
Logger logger;
//读取配置文件
string factoryString = ConfigurationManager.AppSettings["factory"];
//反射生成对象
factory = (LoggerFactory)Assembly.Load("FactoryMethodSample").CreateInstance(factoryString);
logger = factory.CreateLogger();
logger.WriteLog();
Console.Read();
}
}
}
10、 配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="factory" value="FactoryMethodSample.FileLoggerFactory"/>
</appSettings>
</configuration>