Программирование похоже на обучение катанию на лыжах (что за канадцы!). Вы быстро изучаете основы, но на освоение уходят годы.

Итак, вы знаете правила ООП. Вы можете создавать простые и, возможно, даже более сложные программы. Может быть, вы даже знаете больше, чем один язык уже. Куда вам следует направиться дальше? Одним из направлений станут шаблоны проектирования. Давайте подробнее рассмотрим один из самых популярных: Factory. Состав: 1 интерфейс и 4 класса.

Посмотреть файлы Java на github

Нет ничего лучше реальных примеров! Итак, давайте представим, что вы живете в Уистлере, Британская Колумбия, и вам посчастливилось зарабатывать 12 долларов в час в магазине велосипедов (хотя у вас есть бесплатный сезонный абонемент в байк-парк! :)). Каждый день вы продаете велосипеды в диапазоне цен от 200 долларов до +10 000 за настоящего монстра грязного прыжка.

Но велосипед есть велосипед, и производство и продажа каждого велосипеда по-прежнему очень похожи. Таким образом, мы можем создать интерфейс с именем Bike и дать ему только один метод — продавать, который будет принимать String — марку велосипедной рамы и ничего не возвращать (void).

Теперь подумайте о разных велосипедах, на которых вы можете ездить. Допустим, мы хотим продавать 2 типа велосипедов: горные и шоссейные. Эти 2 класса будут реализовывать наш интерфейс Bike. Создадим для них конструкторы с ценой int. Мы могли бы передать цену в качестве параметра в методе sell(), но мы хотим построить велосипед с точно такой суммой денег, которую, по словам клиента, он имеет в качестве бюджета, поэтому для нас будет лучше иметь ее в фактический объект.

В веломагазине мы просто продаем велосипеды. Где они построены? На заводе! Итак, следующим шагом будет создание класса BikeFactory. Как это работает? Как и на любой фабрике, чем больше денег у клиента, тем лучший велосипед он получает.

Последний шаг будет работать: создание реального класса BikeShop с помощью основного метода. Сегодня у нас 2 клиента: богатый клиент из Ванкувера и бедный парень, получающий минимальную заработную плату, но живущий мечтой в Уистлере. Мы еще не знаем, какие велосипеды они могут купить в своем ценовом диапазоне. Наш завод примет решение.

Во-первых, давайте создадим объект BikeFactory. Затем вызовите для него метод build(budget), который вернет велосипед. В этот момент, как вы можете видеть, у вас есть велосипед в нашем магазине велосипедов, который был создан на фабрике. Сейчас продадим! Поскольку все наши горные и шоссейные велосипеды реализуют метод продажи, давайте вызовем его для наших объектов велосипеда, передав также марку велосипедной рамы в виде строки.

Как видите, сборка велосипедов и принятие решения о том, какой это будет велосипед, происходит на Фабрике — магазин велосипедов не знает об этом процессе, потому что он всего лишь посредник. BikeShop обращается к объектам велосипеда с помощью общего интерфейса Bike, но объекты создаются на заводе.