Раздел: [[Программирование | ]]>[[Паттерны | ]]
----
**Одиночка** (**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()
{
}
----
См. также
*AxaptaPedia:Singleton_pattern
*wiki:SingletonPattern