首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态工厂-好的做法?

静态工厂-好的做法?
EN

Stack Overflow用户
提问于 2014-08-04 14:43:08
回答 1查看 184关注 0票数 2

我有一个静态日志管理器类,它应该根据参数返回所需记录器的实例。

代码语言:javascript
复制
public static class LogManager {

    private static ILoggerFactory Factory { ... }

    public static ILogger GetLogger(string name) {
        return Factory.Create(name);
    }

}

由于必须设置(初始化) ILoggerFactory的具体实现,所以我想知道是否应该只在每次请求工厂时保持对实现类型的引用并返回一个新实例,或者是否可以保留对实现实例的静态引用。

版本1

代码语言:javascript
复制
private static Type _factoryType;

public static void SetFactory<TFactory>()
    where TFactory : ILoggerFactory, new()
{
    _factoryType = typeof(TFactory);
}

private static Factory {
    get { return (ILoggerFactory)Activator.CreateInstance(_factoryType);
}

public static ILogger GetLogger(string name) {
    return Factory.Create(name);
}

第2版

代码语言:javascript
复制
private static ILoggerFactory _loggerFactory;

public static void SetFactory<TFactory>()
    where TFactory : ILoggerFactory, new()
{
    _loggerFactory = (ILoggerFactory)Activator.CreateInstance<TFactory();
}

public static ILogger GetLogger(string name) {
    return _loggerFactory.Create(name);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-04 14:59:25

可以说,主要的区别似乎在于延迟加载: v1将在调用GetLogger时创建记录器类型,而v2将在SetFactory期间创建记录器。否则就没有多大区别了。可以将引用作为私有静态字段保留到记录器的类型或工厂本身。

但是,如果这是生产代码,我将完全摆脱这个日志管理器和工厂。相反,我会直接使用日志框架,比如nlog或log4net。这简化了代码并使其更易于维护。在这种情况下,构建抽象是过度工程的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25121335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档