Пример ниже показывает, что вы можете использовать интерфейсы с одноэлементным классом (что невозможно со статическим классом.)
Я предпочитаю этот шаблон выше большого списка статических методов / свойств или нескольких статических классов.
Эти интерфейсы могут предоставлять специфические для субъекта настройки, которые могут даже использоваться в качестве параметров для других методов или классов без того, чтобы эти классы знали, откуда поступают настройки, при условии соблюдения контракта.
public sealed class Settings : IUserStettings, IOSettings
{
static readonly Settings instance = new Settings();
static Settings(){ }
Settings(){ }
public static Settings Instance
{
get { return instance; }
}
//-- interface implementation
public string UserName
{
get { throw new NotImplementedException(); }
}
// ---etc...
public string filename
{
get { throw new NotImplementedException(); }
}
//-- interface implementation
}
public interface IOSettings
{
string disk {get;}
string path { get; }
string filename { get; }
}
public interface IUserStettings
{
string UserName { get; }
string Password { get; }
}
И это можно использовать простым способом, как:
IOSettings iosettings = Settings.Instance as IOSettings;
if(iosettings!=null){
Filereader.ReadData(IOSettings iosettings);
}
или
IUserSettings usersettings = Settings.Instance as IUserSettings;
if(usersettings!=null){
UserManager.Login(IUserSettings usersettings);
}