Свойства Singleton

Хорошо, если я создаю singleton-класс и представляю одноэлементный объект через общедоступное статическое свойство... Я понимаю это.

Но мой singleton-класс имеет другие свойства в нем. Это должно быть статичным? Это должно также быть частным?

Я просто хочу быть в состоянии получить доступ ко всем свойствам своего singleton-класса путем выполнения этого:

MySingletonClass.SingletonProperty.SomeProperty2

Куда SingletonProperty возвращает меня единственный одноэлементный экземпляр. Я предполагаю, что мой вопрос, как Вы представляете другие свойства в singleton-классе.. сделайте их частными и затем получите доступ к ним через свой общедоступный одиночный элемент статическое свойство?

Или должны все Ваши другие свойства и методы одиночного элемента быть общедоступными непомехами?

12
задан M.A. Hanin 8 March 2010 в 21:46
поделиться

6 ответов

Как только вы получите 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!";
24
ответ дан 2 December 2019 в 04:53
поделиться

Пока они не статичны, вам нужен экземпляр объекта для доступа к свойству. И если единственный способ создания экземпляра объекта - это паттерн singleton, то свойства вашего класса по своей сути являются частью единственного экземпляра класса. Ничего особенного не требуется.

2
ответ дан 2 December 2019 в 04:53
поделиться

Нет, пусть они будут публичными. Поскольку может существовать только один экземпляр класса, единственный способ доступа к этим свойствам будет осуществляться через единственный экземпляр.

2
ответ дан 2 December 2019 в 04:53
поделиться

Они должны быть нестатическими общедоступными свойствами.

Подумайте об этом так. Вы один-единственный экземпляр этого класса - но все же экземпляр.

Таким образом, вы делаете свой конструктор закрытым и создаете статическое свойство, которое обрабатывает отложенное создание экземпляра.

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

1
ответ дан 2 December 2019 в 04:53
поделиться

Ваш MySingletonClass.SingletonProperty возвращает ссылку на экземпляр класса Singleton. Следовательно, вы можете использовать общедоступные свойства (и методы и тому подобное) точно так же, как с любым другим экземпляром класса.

MySingletonClass.SingletonProperty.SomeProperty2

Когда вы сделаете SomeProperty2 статическим, вы можете сделать следующее (но это не в духе шаблона проектирования Singleton):

MySingletonClass.SomeProperty2
0
ответ дан 2 December 2019 в 04:53
поделиться

Сделайте их общедоступными свойствами, как и любой другой класс. Использование синглтонного шаблона будет независимым от этого.

2
ответ дан 2 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: