Раздел: [[Программирование | ]]>[[Паттерны | ]] ---- **Одиночка** (**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