Молодец, разобрал синглтоны, однако, можно было бы и чуть-чуть теории прибавить. Так сказать, чтобы не шариться в интернете. Чисто мое мнение.
Собственно, поддерживаю "самый распространенный метод" создания синглтонов.
Не очень поддерживаю метод из Википедии - необходимо везде заводить отдельную переменную, SomeVar := TSingleton.GetInstance(), но в целом более дуракоустойчивая система, чем первый варинт :)
Пока против последнего предложенного метода. Неочевидный на первый взгляд способ нескольких синглтонов (изначально, вообще подумал, что речь идет о нескольких одинаковых синглтонах, что немного нонсенс). При первом беглом просмотре кода также не оценил списка, в котором может быть только один объект.
Потом, конечно, просмотрев более внимательно, понял, что вся соль будет в наследовании. Новичку будет не очевидно... или я нюх растерял уже :)
В общем, вердикт - хорошо, что написал :) Впоследствии, возможно, утащу приведенную реализацию куда-нибудь в свои проекты :)
Обновил текст - добавил чутка пояснения к 3-й реализации. Пояснил различия реализаций.
perfect daemon, Ты не растерял нюх) Материал сётаки такой что не за пару минут понимается)
Извиняюсь что мало написал теории... Мне показалось норм.
И ты правильно понял, что все элементы, касаемые логик программы, в 3-м примере реализуются исключительно в наследниках. А сам приведённый класс - это лишь паттерн - шаблон, предназначенный исключительно для наследований.
Допустим у меня TForm, TDataModule или какой нибудь другой модуль должен быть синглтоном, то как быть с наследованием и шаблоном? Более того допустим уменя уже имеются иерархия классов в цепочке и мне надо чтобы какой нибудь класс в цепочке стал бы синглтоном, то как можно применить этот шаблон?
Если класс уже наследник, то придётся его самого делать синглтоном, а не наследником синглтона. А т.е. все важные поля сингла реализовать в искомом классе.
Молодец, разобрал синглтоны, однако, можно было бы и чуть-чуть теории прибавить. Так сказать, чтобы не шариться в интернете. Чисто мое мнение.
ОтветитьУдалитьСобственно, поддерживаю "самый распространенный метод" создания синглтонов.
Не очень поддерживаю метод из Википедии - необходимо везде заводить отдельную переменную, SomeVar := TSingleton.GetInstance(), но в целом более дуракоустойчивая система, чем первый варинт :)
Пока против последнего предложенного метода. Неочевидный на первый взгляд способ нескольких синглтонов (изначально, вообще подумал, что речь идет о нескольких одинаковых синглтонах, что немного нонсенс). При первом беглом просмотре кода также не оценил списка, в котором может быть только один объект.
Потом, конечно, просмотрев более внимательно, понял, что вся соль будет в наследовании. Новичку будет не очевидно... или я нюх растерял уже :)
В общем, вердикт - хорошо, что написал :) Впоследствии, возможно, утащу приведенную реализацию куда-нибудь в свои проекты :)
Обновил текст - добавил чутка пояснения к 3-й реализации. Пояснил различия реализаций.
ОтветитьУдалитьperfect daemon,
Ты не растерял нюх) Материал сётаки такой что не за пару минут понимается)
Извиняюсь что мало написал теории... Мне показалось норм.
И ты правильно понял, что все элементы, касаемые логик программы, в 3-м примере реализуются исключительно в наследниках. А сам приведённый класс - это лишь паттерн - шаблон, предназначенный исключительно для наследований.
Допустим у меня TForm, TDataModule или какой нибудь другой модуль должен быть синглтоном, то как быть с наследованием и шаблоном?
ОтветитьУдалитьБолее того допустим уменя уже имеются иерархия классов в цепочке и мне надо чтобы какой нибудь класс в цепочке стал бы синглтоном, то как можно применить этот шаблон?
Если класс уже наследник, то придётся его самого делать синглтоном, а не наследником синглтона. А т.е. все важные поля сингла реализовать в искомом классе.
ОтветитьУдалить