2012-06-06 3 views
1

Все учебники я читал до сих пор о Singleton рисунка были ниже:Это настоящая реализация Singleton Pattern?

public sealed class Singleton 
{ 
     private static readonly Singleton instance = new Singleton(); 

     private Singleton(){} 

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

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

например, предположим, что существует класс X в dll с именем Y. находится в правильном порядке:

public sealed class Singleton 
{ 
     private static readonly Y.X instance = new Y.X(); 

     private Singleton(){} 

     public static Y.X Instance 
     { 
     get 
     { 
      return instance; 
     } 
     } 
} 

это настоящий синглтон? если нет, то каков правильный способ справиться с этой ситуацией?

ответ

1

Нет его не синглтон шаблон. Тот факт, что вы вызываете новый Y.X(), означает, что любой может его назвать. Это специально не запрещает новые экземпляры Y.X()

Однако код в порядке, если вам нужно убедиться, что вы ссылаетесь только на один экземпляр Y.X в своем приложении. Затем вы можете получить его, вызвав Singleton.Instance.

Это на самом деле шаблон Factory (класс, предназначенный для создания объектов), и я бы предложил вам назвать класс XFactory или что-то подобное, вместо singleton.

1

Я хотел бы использовать что-то вроде:

public static class Singleton<T> 
    where T : new() 
{ 
    private static readonly Lazy<T> instance = new Lazy<T>(); 

    public static T Instance 
    { 
     get 
     { 
      return instance.Value; 
     } 
    } 
} 

Идея заключается в том, чтобы использовать Generics для того, чтобы указать любой тип в качестве параметра типа.

Ленивый - это просто улучшение, чтобы создать экземпляр фактического экземпляра объекта.

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

+0

Спасибо, нет, я не использую Y.X напрямую. но я должен быть уверен, что каждый раз, когда я создаю экземпляр класса «SingleTon», его свойство экземпляра относится к первому созданному объекту Y.X. не новый. –