Здравствуйте, vladpol, Вы писали:
V>Теоретически вопрос V>Можноли сказать что конструция static class реализует патерн Singleton? Или чего-то не хватает?
Нет, но можно сказать, что класс со статическими членами реализует monostate pattern.
Здравствуйте, vladpol, Вы писали:
V>Можноли сказать что конструция static class реализует патерн Singleton?
только если очень сильно хочется
V>Или чего-то не хватает?
хотя бы одного экземпляра класса
Здравствуйте, vladpol, Вы писали:
V>Теоретически вопрос V>Можноли сказать что конструция static class реализует патерн Singleton? Или чего-то не хватает?
ИМХО, раз у статик-класса нет экземпляров, никаким синглетоном тут не пахнет.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, vladpol, Вы писали:
V>>Теоретически вопрос V>>Можноли сказать что конструция static class реализует патерн Singleton? Или чего-то не хватает?
MC>ИМХО, раз у статик-класса нет экземпляров, никаким синглетоном тут не пахнет.
С другой стороны, если данные хранятся и доступ к ним структурирован, то в памяти где-то сидит экземпляр этого класса, доступ к которому из программы возможен только обращениями к методам и полям этого класса, как к статическим. =) Разве не так?
Здравствуйте, Saruwatari, Вы писали:
MC>>ИМХО, раз у статик-класса нет экземпляров, никаким синглетоном тут не пахнет.
S>С другой стороны, если данные хранятся и доступ к ним структурирован, то в памяти где-то сидит экземпляр этого класса,
Сидеть-то, он может быть, и сидит. Но не экземпляр этого класса, а то, что (например, в Scala) называется companion object. Причем его ни привести к какому-то интерфейсу, ни передать куда-либо невозможно.
Здравствуйте, vladpol, Вы писали:
V>Теоретически вопрос V>Можноли сказать что конструция static class реализует патерн Singleton? Или чего-то не хватает?
Singleton объект можно подменить другим объетом с совместимым интерфейсом (во время исполнения). Эти изменения могут сразу отобразиться везде, где используется Singleton.
Со static class такое не пройдет, у него возможна единственная реализация во время исполнения.
Здравствуйте, vladpol, Вы писали:
V>Теоретически вопрос V>Можноли сказать что конструция static class реализует патерн Singleton? Или чего-то не хватает?
Я думаю, что нет, т.к. паттерн синглтон в принципе может порождать не только один объект, а несколько. Во вторых, когда надобность в созданном объекте отпадет, ты не сможешь освободить занимаемую ей память. А если она еще держит другие ссылки, что чревато утечкой памяти. В третьих, ты забываешь про "lazy initialization", т.е. если за все время выполнения программы объект не нужен, то соответственно он и не будет создан.
Lisp is not dead. It’s just the URL that has changed: http://clojure.org
Здравствуйте, Ilya10k, Вы писали:
V>>Теоретически вопрос V>>Можноли сказать что конструция static class реализует патерн Singleton? Или чего-то не хватает?
I>Singleton объект можно подменить другим объетом с совместимым интерфейсом (во время исполнения). Эти изменения могут сразу отобразиться везде, где используется Singleton. I>Со static class такое не пройдет, у него возможна единственная реализация во время исполнения.
Кстати, довольно интересно получается. Как раз с объектом это не пройдет, так как никто не запрещает мне сохранить ссылку на предыдущий объект синглетона где-нибудь. В итоге, в системе окажется два объекта там, где должен быть один. Если же я все обращения к объекту скрою за статическим интерфейсом, то все будет работать как и планировалось. Поэтому интуитивно дизайн со статическими методами кажется мне более правильным в общем случае. Что же до изначального вопроса, то я бы сказал так — паттерн Singleton обычно используется, чтобы реализовать конструкцию static class