代码之家  ›  专栏  ›  技术社区  ›  ChaosPandion

有没有更好的方法来模拟生物体的进食行为?

  •  1
  • ChaosPandion  · 技术社区  · 15 年前

    基本上,每个实体都有一组它将遵循的喂养行为。 出于某种原因,我提出的模型感觉不太对劲。我认为最令人不安的部分是使用单件有意义。

    有更好的方法吗?

    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;
        }
    }
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   dtb    15 年前

    我认为你的解决方案非常好。一个有机体是由进食行为组成的,其中每一种进食行为都是实现这种行为的不可变物体。因为行为通常是作为类实现的,所以您的单例在这里看起来是完全有效的。

    我唯一能想到的是,公开可见的肉豆蔻类行为可能是不必要的。您可以简单地将类放在FeedingBehavior中,使其成为私有的,并且只公开包含单例的公共静态只读字段。

    public abstract class StringPreparer
    {
       public static readonly StringPreparer Domain = new DomainStringPreparer();
       public static readonly StringPreparer Node = new NodeStringPreparer();
       public static readonly StringPreparer Resource = new ResourceStringPreparer();
       public static readonly StringPreparer Sasl = new SaslStringPreparer();
       public static readonly StringPreparer Trace = new TraceStringPreparer();
    
       protected StringPreparer()
       {
       }
    
       public abstract bool TryPrepare(
          string text, int offset, int count, out string result);
    
       ...
    
       private class DomainStringPreparer : StringPreparer
       {
          public override bool TryPrepare(
             string text, int offset, int count, out string result)
          {
             ...
          }
       }
    
       private class NodeStringPreparer : StringPreparer
       {
          ...
    
    推荐文章