Хорошо, если я создаю singleton-класс и представляю одноэлементный объект через общедоступное статическое свойство... Я понимаю это.
Но мой singleton-класс имеет другие свойства в нем. Это должно быть статичным? Это должно также быть частным?
Я просто хочу быть в состоянии получить доступ ко всем свойствам своего singleton-класса путем выполнения этого:
MySingletonClass.SingletonProperty.SomeProperty2
Куда SingletonProperty возвращает меня единственный одноэлементный экземпляр. Я предполагаю, что мой вопрос, как Вы представляете другие свойства в singleton-классе.. сделайте их частными и затем получите доступ к ним через свой общедоступный одиночный элемент статическое свойство?
Или должны все Ваши другие свойства и методы одиночного элемента быть общедоступными непомехами?
Как только вы получите SingletonProperty
(который является единственным экземпляром объекта), все, что будет после этого, может быть реализовано так, как если бы вы создавали класс для создания экземпляра, потому что Singleton на самом деле является единственным экземпляром обычный объект.
Например, следующий синглтон (очевидно, не лучший дизайн синглтона, но будьте терпеливы) предлагает два общедоступных свойства с именами Value и Name:
public class MySingleton
{
private static MySingleton _instance;
private MySingleton() { }
public static MySingleton Instance
{
get
{
if(_instance == null)
_instance = new MySingleton();
return _instance;
}
}
// Your properties can then be whatever you want
public string Value { get; set; }
public string Name { get; set; }
}
Доступ к этим свойствам будет выглядеть так:
MySingleton.Instance.Name = "StackOverflow";
MySingleton.Instance.Value = "Rocks!";
Пока они не статичны, вам нужен экземпляр объекта для доступа к свойству. И если единственный способ создания экземпляра объекта - это паттерн singleton, то свойства вашего класса по своей сути являются частью единственного экземпляра класса. Ничего особенного не требуется.
Нет, пусть они будут публичными. Поскольку может существовать только один экземпляр класса, единственный способ доступа к этим свойствам будет осуществляться через единственный экземпляр.
Они должны быть нестатическими общедоступными свойствами.
Подумайте об этом так. Вы один-единственный экземпляр этого класса - но все же экземпляр.
Таким образом, вы делаете свой конструктор закрытым и создаете статическое свойство, которое обрабатывает отложенное создание экземпляра.
Все остальные свойства, члены и методы должны быть просто частью экземпляра - экземпляр, который вы теперь гарантировали, будет единственным и неповторимым.
Ваш MySingletonClass.SingletonProperty
возвращает ссылку на экземпляр класса Singleton. Следовательно, вы можете использовать общедоступные свойства (и методы и тому подобное) точно так же, как с любым другим экземпляром класса.
MySingletonClass.SingletonProperty.SomeProperty2
Когда вы сделаете SomeProperty2
статическим, вы можете сделать следующее (но это не в духе шаблона проектирования Singleton):
MySingletonClass.SomeProperty2
Сделайте их общедоступными свойствами, как и любой другой класс. Использование синглтонного шаблона будет независимым от этого.