Метод Java «Сканер» против шаблона проектирования фасадов GoF - PullRequest
1 голос
/ 10 апреля 2019

Я изучаю шаблоны проектирования, чтобы улучшить свои навыки программирования. Сейчас я изучаю шаблон дизайна фасада.

Возможно, я смущаюсь, но, в качестве примера: разве Scanner не является фасадом? Обратите внимание, что я не спрашиваю, что такое Фасад, но пытаюсь определить, является ли Сканер.

Хорошо, я заявляю об этом, чтобы я мог использовать определенные функции, не обращаясь к сложным и более глубоким функциям, верно?

Я заявляю

Scanner sc = new Scanner(System.in);

так что я могу:

String x = sc.nextLine();

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Это хороший пример класса, который упрощает API и делает его более понятным и приближенным к тому, для чего он используется.Когда мы хотим прочитать данные от пользователя в консольном приложении, InputStream будет трудно использовать.Давайте рассмотрим некоторые определения Фасад и сопоставим их с Scanner class:

Intent

  • Предоставим унифицированный интерфейс для набора интерфейсов вподсистема.Фасад определяет интерфейс более высокого уровня, который упрощает использование подсистемы.
  • Обертка сложной подсистемы с более простым интерфейсом.

Scanner класс соответствует обеим вышеуказанным точкам.

Контрольный список

  1. Определение более простого, унифицированного интерфейса для подсистемы или компонента.
  2. Разработка класса «оболочки», который инкапсулирует подсистему.
  3. Фасад / оболочка отражает сложность и совместную работу компонента и делегирует соответствующие методы.
  4. Клиент использует (связан) только с Фасадом.
  5. Подумайте, добавят ли дополнительные Фасадызначение.

Scanner класс соответствует всем вышеуказанным точкам.Итак, мы можем рассматривать Scanner как фасад для InputStream.

1 голос
/ 11 апреля 2019

Фасад объединяет отношения один-ко-многим в отношения один-к-одному для своих клиентов. Они становятся проще, потому что они зависят от одного (верхнего уровня) фасада, а не от многих (низкоуровневых) отдельных компонентов. Фасад сам принимает на себя множество низкоуровневых зависимостей (и делегирует их).

Отношение Scanner к Readable source представляет собой простой старый объектный состав. Нет консолидации зависимостей. Хотя верно, что Scanner предоставляет новые функциональные возможности и является абстракцией более высокого уровня, чем Readable, это верно для многих или большинства композиционных отношений.

Фасад одновременно уменьшает зависимости (связь) и увеличивает абстракцию для своих клиентов. Обратите внимание, что на диаграммах Фасадного паттерна всегда отображаются кратные исходящие стрелки от объекта Фасад.

...