我认为你的解决方案非常好。一个有机体是由进食行为组成的,其中每一种进食行为都是实现这种行为的不可变物体。因为行为通常是作为类实现的,所以您的单例在这里看起来是完全有效的。
我唯一能想到的是,公开可见的肉豆蔻类行为可能是不必要的。您可以简单地将类放在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
{
...