Инструменты пользователя

Инструменты сайта


axapta:singleton

Раздел: Программирование>Паттерны


Одиночка (singleton) это класс, который позволяет создавать только один свой экземпляр. Этот экземпляр не создается, пока он не будет запрошен первый раз (ЛениваяИнициализация).

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

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

Для того, чтобы сделать класс одиночкой, необходимо добавить следующий статический метод в класс:

 // RunOn:CalledFrom
 public static SingletonTest instance()
 {
     SingletonTest ret;
     SysGlobalCache globalCache = infolog.objectOnServer() ? appl.globalCache() : infolog.globalCache();
     ; 
     if (globalCache.isSet(ClassStr(SingletonTest), 0))
         ret = globalCache.get(ClassStr(SingletonTest), 0);
     else
     {
         ret = new SingletonTest();
         infoLog.globalCache().set(ClassStr(SingletonTest), 0, ret);
         appl.globalCache().set(ClassStr(SingletonTest), 0, ret);
     }
     return ret;
 }

Чтобы нельзя было создать несколько экземпляров класса в обход этого механизма надо запретить вызывать new извне класса:

private void new()
{
}

См. также

axapta/singleton.txt · Последнее изменение: 2018/04/13 22:43 (внешнее изменение)