Вопрос о синглтоне - PullRequest
       16

Вопрос о синглтоне

2 голосов
/ 25 мая 2010

Я читаю Java-учебник для перечислений, расположенных здесь, и у меня есть вопрос: http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html#Card

Часть, в которой я запутался, выглядит следующим образом:

"Класс Card, указанный выше, содержит статическая фабрика, которая возвращает колоду, но нет никакого способа получить индивидуальная карта от ее ранга и подходить. Просто разоблачение конструктора уничтожит свойство синглтона (что только один экземпляр каждого карта может существовать). Вот как написать статическую фабрику, которая сохраняет свойство синглтона, используя вложенный EnumMap: "

Теперь, насколько я понимаю, изменение оригинального частного конструктора "Card" на public позволило бы нам создавать неограниченное количество копий объекта "Card" с заданной мастью + рангом. Предлагаемое решение состояло в том, чтобы создать EnumMap, в котором будут храниться четыре Карты (по одной для каждой масти), которые сами содержат 13 объектов Карты с рангом в качестве ключей.

И теперь, если вы хотите извлечь конкретный объект Card из колоды, вам нужно просто вызвать метод "valueOf". Теперь у меня вопрос: что мешает вам вызывать метод valueOf столько раз, сколько вы хотите? Не приведет ли это к той же проблеме, что и открытый исходный приватный конструктор?

Спасибо.

1 Ответ

1 голос
/ 25 мая 2010

Нет. valueOf() всегда будет возвращать один и тот же экземпляр. Обратите внимание, что на самом деле все создается один раз в блоке static.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...