这更多是关于一般设计模式的问题。我有一个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循环。有更好的方法来解决这个问题吗?