Закрепляем паттерн Singleton

  • 16
  • Недоступна
Разберёмся с паттерном Singleton на примере светила и планет солнечной системы. Для начала займитесь поиском и найдите где-нибудь в интернете пример "ленивой" реализации Singleton и создайте по образу и подобию три Singleton-класса: Sun, Moon и Earth. Затем реализуйите в них интерфейс Planet. И проделайте ещё парочку операций.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (292)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений Т.
Уровень 25, Москва, Россия
29 июля, 04:39
Через switch case не захотел, видимо потому что строки надо сравнивать через equals
Евгений Т.
Уровень 25, Москва, Россия
28 июля, 05:20
Как то коряво получается "в отдельных файлах создать в отдельных файлах" неплохо было бы исправить.
Robert Imangulov System Engineer в Сибинтек
26 июня, 11:33
Станислав Корнеев
Уровень 19, Воронеж , Россия
25 июня, 14:09
Наверное уже кто-то заметил, но два раза повторяется фраза "в отдельных файлах" во втором пункте условия
Morak Dim
Уровень 25, Благовещенск, Россия
20 июня, 13:31
Прикольная задача, решил с 6 попытки только из-за того что не понимал, чего именно от меня хочет валидатор и как именно работает Singleton (lazy initialization). // Это мне еще надо постигать. Но та суть что, иди погугли ленивую реализацию синглтона и реши задачу с такими-то условиями - прям задала драйва.
Алексей Болдырев
Уровень 16, Астрахань, Россия
14 июня, 06:48
Я не пойму поле в классах Moon, Sun, Earth обязательно по правилам паттерна instance называть, или этого только валидатор требует? private static Moon moon - так нельзя?
Dim
Уровень 16, Житомир, Украина
17 июня, 07:36
имя переменной можно выбрать любое, просто так принято)
Ilyan Kolesnikov
Уровень 18, Туймазы, Россия
17 июня, 09:18
в этой книге есть ответ. И в целом не только на твой вопрос. Так тебе будет проще понимать своих коллег по цеху даже если ты скопировал код где-то в интернете.
Alexander Iljushkin
Уровень 16, Санкт-Петербург
6 мая, 16:45
Я читал, что synchronized в getInstance - это плохой код, производительность в минус. Весь многопоточный код, который тут предполагался, упрется тут в один поток. Кроме того double check работает не на всех реализациях java машин. Для инициализации синглтона рекомендуется использовать статическую инициализацию внутреннего подкласса, переиспользуя механизмы самой java-машины по многопоточному доступу к статическим классам. Но ваше задание составлено таким образом, что можно реализовать только хреновую реализацию. Такая не проходит:
package com.javarush.task.task15.task1522;

public class Earth implements Planet {
    private static Earth instance;

    public static Earth getInstance() {
        EarthSingleton.init();
        return instance;
    }

    private static class EarthSingleton {
        static {
            System.out.println("EarthSingleton");
            instance = new Earth();
        }

        private static void init() {
        }
    }
}
Саня
Уровень 26, Москва
19 июня, 16:59
упрется в один поток, если synchronized ставить на весь getInstance() целиком. Если только на случай первой (и единственной) инициализации внутри getInstance(), то всё ок https://en.wikipedia.org/wiki/Double-checked_locking
George QA Automation Engineer
14 июля, 12:41
В твоем примере конструктор класса не приватный, а это требуется в условии. Возможно поэтому такое решение не приняла система.
Олексій Моцьор
Уровень 18
13 апреля, 19:50
Вместо If используйте else if
Ilyan Kolesnikov
Уровень 18, Туймазы, Россия
17 июня, 09:20
а еще оператор switch как альтернативное решение
Dmitry B
Уровень 18, DownTown
20 марта, 17:44
Используйте equalsIgnoreCase у меня с простым equals не принял
Тарас Шкарапут
Уровень 17, Ульяновск, Россия
4 мая, 15:15
Подозреваю, что вы переменные из интерфейса поместили в кавычки, поэтому не сработало.
ARCOS
Уровень 18, Киев, Украина
17 июня, 06:01
нормально принимает и с простым equals.
Дмитрий
Уровень 27, Москва
19 марта, 18:44
Кому лень искать - вотЪ https://javarush.ru/groups/posts/589-patternih-i-singleton--dlja-vsekh-kto-vpervihe-s-nimi-stolknulsja