【发布时间】:2010-02-25 23:41:03
【问题描述】:
基本上每个实体都会有一组它会遵循的进食行为。 由于某种原因,我想出的模型感觉不对。我认为最麻烦的部分是使用单例是有意义的。
有没有更好的办法?
public bool IsEntityEdible(Entity target)
{
foreach (var feedingBehavior in FeedingBehaviors)
{
if (feedingBehavior.WouldEat(target))
{
return true;
}
}
return false;
}
public abstract class FeedingBehavior
{
public abstract bool WouldEat(Entity entity);
}
public sealed class Myrmecophagy : FeedingBehavior
{
public readonly static Myrmecophagy Instance = new Myrmecophagy();
private Myrmecophagy() { }
public override bool WouldEat(Entity entity)
{
return entity is Ant || entity is Termite;
}
}
【问题讨论】:
-
您能否进一步详细说明您认为这不正确的原因?生物的摄食行为并不完全是软件开发中通常建模的标准问题......
-
我认为您需要使用 GoF 书中的 FeedingOrganism 模式。
-
@dtb - 我认为最麻烦的部分是使用单例是有意义的。
-
我唯一能想到的是,Myrmecophagy 行为的额外课程可能是不必要的。除此之外,我认为您的解决方案非常好。一个有机体由摄食行为组成,其中每个摄食行为都是实现该行为的不可变对象。由于行为通常作为类实现,因此您的单例在这里看起来非常有效。
-
@dtb - 也许您应该考虑发布答案?
标签: c# object-model