Практическая реализация популярного шаблона проектирования

Зачем нам нужен шаблон проектирования Facade?

Взгляните на изображение ниже. Правому классу нужны 4 метода, принадлежащие самому левому классу. Но для того, чтобы определить, к каким четырем методам нам нужно получить доступ, нам, вероятно, придется покопаться во внутренностях крайнего левого ClassA. или есть лучшее решение!

Я могу просто разместить фасад между своими классами, и теперь фасад имеет внутреннюю ссылку на ClassA и организует вызовы от имени нашего класса Program. Мы используем фасадный класс, который содержит classA и предоставляет только те методы, которые нужны нашей программе. Мы можем использовать более осмысленные имена методов, плюс наша программа общается только с фасадом, вообще не зная о classA.

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

Предположим, мы хотим реализовать класс смартфона, который имеет 3 характеристики: процессор, память (ОЗУ, ПЗУ) и дисплей. Наша реализация может выглядеть так:

Листинг 1: класс Processor

Листинг 2: класс Memory

Листинг 3: класс Display:

Листинг 4: вызывающий класс, класс SmartPhone:

Давайте сначала поймем, что это простая проблема, но поскольку смартфоны должны следовать последним тенденциям и инновациям, вам нужно будет добавить больше классов для каждой функции.

Вам придется пройти через всю грязь классов, чтобы заново реализовать smartPhone. Здесь у нас есть только 3 класса (Display, Memory, Processor), но в реальном проекте, как я уже сказал, будут сотни классов, что затрудняет поиск классов, необходимых для реализации нового смартфона.

Мы можем добавить средний слой, который выступает в качестве фасада для нашего смартфона, который позаботится обо всех функциях, необходимых для создания смартфона. Чтобы сделать наш шаблон более продвинутым, мы можем добавить один интерфейс, через который будет взаимодействовать наш класс smartPhone.

Почему интерфейс? Хороший вопрос.

Эта абстракция позволяет вызывающей программе (в нашем случае smartPhone) работать исключительно с фасадом и упростить код. Представление интерфейса здесь действительно упорядочивает вещи для вызывающей стороны и позволяет легко добавлять новые фасадные классы к базовым классам обслуживания (больше функций, больше классов) изменяться в будущем (более продвинутые классы смартфонов в будущем).

Если завтра я захочу выпустить новый смартфон на Android 10 с новыми высококлассными характеристиками, этого можно добиться, взаимодействуя с интерфейсом.

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

Что, если мы поместим процессор, память и дисплей за фасад, чтобы смартфону не приходилось беспокоиться об этой сложности?

Шаг 1

Листинг 5: Добавим интерфейс ISmartPhoneFacade:

Шаг 2

Листинг 6: Теперь добавим класс SmartPhoneFacade:

Листинг 7. Теперь более простой взгляд на наш класс smartPhone:

Если завтра появится новое устройство smartPhone, все, что мне нужно сделать, это создать новый фасад, специфичный для функций этого смартфона, и наследовать от интерфейса ISmartPhoneFacade. Это сила абстракции в oops.

Примечание. добавление дополнительного класса может показаться головной болью, но в целом это помогает, и именно здесь вы можете создавать слабо связанные классы.

Я искренне надеюсь, что вам понравился этот блог и вы вдохновились применить полученные знания в своих собственных приложениях.

Поймай меня на Linkedin !!