我计划通过使用抽象工厂模式解决特定问题。我成功实现了工厂模式,但无法将工厂模式扩展到抽象工厂
我有两个不同的地方可以存储异常细节
我使用工厂模式从客户端
中抽象出对象创建细节接口
public interface ILogException
{
void LogException();
}
FileSystemLogger
public class FileExceptionLogger : ILogException
{
public void LogException()
{
Console.WriteLine("File Exception Logger");
}
}
DBSystemLogger
public class DBExceptionLogger : ILogException
{
public void LogException()
{
Console.WriteLine("DB Exception Logger");
}
}
工厂实施
public class ExceptionFactory
{
const int i = 1;
public static ILogException GetFactory()
{
if (i == 1)
{
return new FileExceptionLogger();
}
else if (i == 2)
{
return new DBExceptionLogger();
}
else
{
return new ServiceExcetionLogger();
}
}
}
我知道这不是最好的实施,但我打算改变它。
现在FileSystemLogger
和DatabaseLogger
本身就是一个工厂,我想在FileSystemLogger
和DatabaseLogger
下对实施进行分组,以便客户可以FileSystemLoggerFactory
和DatabaseLoggerFactory
FileSystemLogger
DatabaseLogger
如何继续定义FileSystemLoggerFactory
和DatabaseLoggerFactory
?
答案 0 :(得分:2)
如果需要,可以将工厂方法设为通用方法:
public static ILogException GetFactory<T>() where T : ILogException
{
return (ILogException)Activator.CreateInstance<T>();
}
称之为:
ILogException logger = ExceptionFactory.GetFactory<FileExceptionLogger>();
您还可能需要查看依赖注入库,如NInject,Unity等。这些可以简化此类问题,允许您集中接口绑定到哪些实现的逻辑。 (即,您可以在应用程序或请求范围中绑定实现。)