Я новичок в Java, и я начинающий вопрос:абстрактный класс NumberFormat - очень путать о GetInstance()
NumberFormat
является абстрактным классом и поэтому я предполагаю, что я не могу сделать экземпляр. Но есть общественный статический (завод?) Метод getInstance()
, что позволяет мне сделать
NumberFormat nf = NumberFormat.getInstance();
Я совершенно запутать. Я буду рад, если кто-то может дать мне подсказки:
- Если существует общедоступный метод получения экземпляра этого абстрактного класса, почему бы и нет конструктора?
- Это абстрактный класс; как мы можем получить этот статический метод, предоставляющий нам экземпляр класса?
- Почему именно такой дизайн? Если я предполагаю, что возможно иметь экземпляр абстрактного класса (???), я не понимаю, почему этот класс должен быть абстрактным вообще.
Спасибо.
Благодарим вас за ответ. Если бы вы могли разработать или дать мне ссылку на пример того, что вы написали в третьей части: «не делая слишком много этого дизайна жестким во время проектирования/компиляции», было бы здорово! С уважением. – Alex
@Alex: Это предпосылка многих так называемых «шаблонов проектирования». В некоторых ситуациях жесткая иерархия классов и их отношения слишком негибкая, чтобы работать должным образом. Вы либо отказываетесь от гибкости, либо создаете себе кошмары для обслуживания, если вам нужно изменить или расширить дизайн. 600 символов слишком коротки, чтобы дать осмысленное введение, но Wikipedia имеет некоторую информацию об этом (http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29). Для многих из них основным принципом является не моделирование отношений между объектами как части классов (во время компиляции), а скорее – Joey
... отложить это до времени выполнения, когда у вас тогда будет гораздо больше гибкости при объединении нескольких классов в единую рабочую система. В этом случае конструктор потребует от вас знать, какой конкретный подкласс «NumberFormat» вам нужен, потому что конструктор 'NumberFormat' не может создать объект« DecimalFormat ». Вы абстрагируетесь здесь от необходимости знать, что * * подклассы *, используя фабричный метод для создания объекта. Метод просто создает подкласс «NumberFormat», который выбирается в зависимости от языкового стандарта. – Joey