Как реализовать общее поведение для синглетонов регулярных выражений в C #? - PullRequest
2 голосов
/ 13 января 2011

Я хочу написать синглтон для проверки регулярных выражений, каждый синглтон должен иметь свое собственное выражение (синглтон для почты, синглтон для идентификационных номеров и т. Д.).

Я думаю, что это должно быть сделано с использованием защищенного или публичного абстрактного статического поля ... что-то вроде:

public abstract class RegExpTester{
    protected abstract RegExpTester tester;
    private Regex engine;

    public bool test(string strToBeTested){
        //Creates a new instance of regExpTester and test the string;
        //If instance does exist, only test. 

    }
}

public sealed class emailTester : RegExpTester {
    // Some code that I've not written since I do not
    // know where should the singleton be instantiated
}

Практически специализированный класс должен знать только, как тестировать связанное регулярное выражение.

Спасибо

Ответы [ 2 ]

2 голосов
/ 13 января 2011

Звучит так, как будто это просто статический класс:

public static class EmailTester
{
  static readonly Regex _regex=new Regex(...);

  public static bool Test(string value)
  {
    return _regex.IsMatch(value);
  }
}

Если это имеет смысл, вы можете сгруппировать такие классы в одном интерфейсе:

namespace Testers
{
  public static class Emailtester
  {
  ...
  }
}
1 голос
/ 14 января 2011

А как же:

public class RegExpTester
    {
        private readonly Regex engine;

        protected RegExpTester( string expression )

            if ( string.IsNullOrEmpty( expression ) )
            {
                throw new ArgumentException( "expression null or empty" );
            }
            engine = new Regex( expression );
        }

        public bool test( string strToBeTested )
        {
            return engine.IsMatch( strToBeTested );
        }
    }

    public sealed class emailTester : RegExpTester
    {
        static emailTester instance = new emailTester();

        emailTester() : base( "some mail expression" ) { }

        public static emailTester Instance
        {
            get
            {
                return instance;
            }
        }
    }

И использование:

emailTester.Instance.test("some text");
...