Я сейчас реализую игру, в которой есть разные типы карт. Будучи всеми картами, они, естественно, имеют общие атрибуты и методы, поэтому был создан абстрактный класс Map
, который затем был разделен на подклассы такими картами, как SafeMap
, HazardousMap
, WeirdMap
и т. Д.
Чтобы упростить добавление новых карт в будущем, использовался шаблон проектирования заводских методов. Таким образом, программа содержит класс MapCreator
, код которого выглядит примерно так:
public class MapCreator{
public Map createMap(char mapType){
switch(mapType){
case 'S':
return new SafeMap();
case 'H':
return new HazardousMap();
case 'W':
return new WeirdMap();
default:
return null;
}
}
}
Теперь я также хотел бы убедиться, что существует только один экземпляр Map (независимо от выбранного подкласса). Я читал, что лучший способ сделать это - развернуть шаблон проектирования синглтона, где статический экземпляр объявляется конфиденциально внутри класса, а конструктор также становится закрытым. Но я не знаю, как это можно сделать в сочетании с шаблоном разработки метода фабрики, поскольку у нас есть несколько подклассов, и getInstance()
должен находиться в конкретном классе.
Я ценю любую помощь.
Примечание: я посмотрел на несколько похожих вопросов , но я не думаю, что ответы на них имеют отношение к моему делу.