【发布时间】:2010-08-10 19:02:24
【问题描述】:
我们刚刚与大学讨论过以下样式是否可以用于 oop。
我们有一个类,它有一个公共函数,并且在构造函数中需要一个阅读器:
public class Converter
{
private readonly IReader _reader;
public Converter(IReader reader)
{
_reader = reader;
}
public byte[] Convert(...params...)
{
return something;
}
}
我们有 Reader1 和 Reader2,它们都实现了 IReader。
我想设置两个管理器:Converter1 和 Converter2,提供相同的公共 Convert() 函数,但 Converter1 将使用 Reader1,Converter2 将使用 Reader2。
对我来说,最简单的解决方案是从 Converter 继承并使用适当的阅读器对其进行初始化:
public class Converter1 : Converter
{
public Converter1():base(new Reader1())
{}
}
public class Converter2 : Converter
{
public Converter2():base(new Reader2())
{}
}
我的大学说,Converter1 和 Converter2 是 Manager,不应该对 manager 使用继承,而是应该在这里应用组合。但从我的角度来看,组合只会导致特定转换器类中的额外代码。
那么,您能否请教一下,在实现管理器时是否可以使用继承? 谢谢
【问题讨论】: