[БЕЗ_ЗВУКА] Теперь пора перейти к изучению поттерна Abstract Factory. Несмотря на то, что в большинстве литературы по шаблонам проектирования он стоит на первом месте, возможно, для понимания он один из наиболее сложных из-за присутствия элемента абстрактности. Дабы понять идею абстрактной фабрики, попрубуем рассмотреть пример из жизни. Вот представьте, что вы хотите построить дом. Перед тем, как есть строить, необходимо его спроектировать, написать чертежи. Зачастую сейчас при заказе проекта дома у компании они вам выдадут всю информацию, то есть дадут не только планировку, но и распишут, из какого материала строить, у какой окна, у какой люстры, а у какой выключатели, дабы они визуально соответствовали друг другу. Но все это не особо принципиально и зачастую может быть изменено уже после простройки каркаса. Ведь когда архитектор делает проект, он в первую очередь думает об удобстве тех, кто будет там жить, определяет, где будут располагаться двери, куда они будут открываться, какова должна быть высота потолка и где должны располагаться санузлы, а где окна. И уже в процессе строительства дома в зависимости от того, на какой фабрики вы закажете элементы, дом у вас будет либо с дубовыми окнами, дверьми и паркетом, или же с пластиковыми окнами, железными дверьми и ламинатом. В этом и есть суть абстрактной фабрики. На момент проектирования для нас абсолютно не важно знать, где мы возьмем все эти компоненты. Важно знать, что все эти компоненты мы сможем достать. Теперь о том, как это выглядит при программировании. Предположим, что нам нужна функция создания диалогового окна. Что для этого нам надо? Во-первых, надо уметь создавать окно. Во-вторых, надо уметь создавать кнопки. Например, «ОК», «Cancel» и прочее. И мы должны уметь выводить некоторую текстовую информацию, например, «А вы точно хотите удалить этот файл?». Может быть, необходимы какие-то дополнительные элементы, например, чекбоксы или радиобоксы и какие-нибудь прочие визуальные элементы. Так вот для функции создания диалога нет никакой необходимости знать, как создаются визуальный компоненты. Функции необходим лишь некий класс, который умеет все это делать, как фабрика- производить окна, кнопки и прочее. Что касается самих элементов, то их уже можно производить различным образом так, чтоб они выглядели либо в стиле операционной системы от Microsoft, Windows 90-х годов или Windows 10, или же в стиле OS X или Linux. Естественно, одна фабрика будет производить только кнопки одного типа, например, Windows 10. А уже другая фабрика будет производить кнопки в стиле OS X. Поэтому фабрика, с которой мы работаем во время написания функции диалогового окна, это некая абстрактная фабрика, в которой все необходимые функции только описаны, но не реализованы. Но когда из нашего приложения мы будем запускать функцию создания диалогового окна, мы ей будем передовать уже реальную фабрику, в которой все эти методы реализованы. В дальнейших видео мы займемся реализацией шаблонов реальной фабрики для формирования некоторого текстового отчета в различных форматах html и markdown. Причем сначала реализуем ее классическим способом, после чего произведем модификацию так, чтобы проект выглядел в духе Python'a, поскольку классическая реализация использует не все возможности данного языка и выглядит немножко чужой. Ну что ж, приступим к реализации! [ШУМ] [БЕЗ_ЗВУКА]