IDisposable类的创建/设计模式

时间:2018-09-19 17:54:15

标签: c# object design-patterns idisposable

这更多是关于一般设计模式的问题。我有一个IDisposable类,该类在其构造函数中使用单个组件,并在构造函数中使用它。 我想将此类重构为也可以处理IEnumerable。下面的简化代码。

public class ResourceManager: IDisposable {
    //Component is disposable object 
    private IEnumerable<Component> m_components;
    private bool disposed = false;

    ResourceManager(Component component): this(new []{component}) 
    {
    }

    ResourceManager(IEnumerable<Component> components) 
    {
        m_components = components;

        //do some other work

        foreach(component in m_components) {
            component.Foo();
        }
    }

    public void Dispose() 
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual Dispose(bool disposing) 
    {
        if (diposed) 
            return;
        if (!disposing)
            return;

        //do some work

        foreach(component in m_components) 
            component.Dispose();

        disposed = true;
    }   
}

我担心的是,大多数时候ResourceManager都将由单个组件实例化,因此转换为IEnumerable会增加开销。 ResourceManager在日志记录中大量使用,因此我想避免这种情况。

我想将ResourceManager重构为AbstractResourceManager,并有两个具体的实现,一个用于单个组件,一个用于多个组件,这将通过ResourceManagerFactory创建。除了这两个类之间有很多重复的代码外,因为这两个类之间的唯一区别是存在用于调用component.Dipose()的foreach循环。有更好的方法来解决这个问题吗?

0 个答案:

没有答案