2 回答
TA贡献1848条经验 获得超2个赞
我看不到您要达到的目标,该类和方法看起来不错。您可以使用Decorator模式链接方法,但似乎还需要几个结果?
如果要使用相同的方法名称和签名,则可以使用显式接口实现,这实际上不是一个好习惯。您甚至可以采用真正的肮脏方式,并使用带有方法名和签名的接口。派生标记接口(这是一个ANTI模式!)。显式实现派生的接口。通过对自己进行反思并调用所有“其他”接口方法来实现基本接口……但是不要为了……而一切!
TA贡献2041条经验 获得超4个赞
问题是返回的结果。每次通话都不同。
这似乎是对Composite模式的不当使用。Composite背后的总体思路是,您不关心是否使用Composite或其任何组成部分,因为它们在逻辑上是可互换的。
为了说明,假设您有一个抽象
interface IPainter
{
double PaintedArea(double hours);
}
您有很多实现-
class DiligentPainter : IPainter
{
double PaintedArea(double hours) => hours * 100;
}
class LazyPainter : IPainter
{
double PaintedArea(double hours) => hours * 20;
}
这是关键部分-考虑一下,您的客户可能不在乎他们是聘用单个画家还是工作人员。他们只在乎所有墙壁都被粉刷过。
因此,您可以制作复合材料PainterCrew并将其作为单个画家使用-
class PainterCrew : IPainter
{
readonly IEnumerable<IPainter> painters;
PainterCrew(IEnumerable<IPainter> painters)
{
this.painters = painters;
}
double PaintedArea(double hours)
{
return this.painters.Sum(p => p.PaintedArea(hours));
}
}
瞧,您不只是返回单个结果的集合,而是以一种有意义的方式对其进行汇总,因此从调用方的角度来看,它们是使用复合还是单个实体都无关紧要。
- 2 回答
- 0 关注
- 135 浏览
添加回答
举报