пятница, 28 сентября 2012 г.

Абстрактная фабрика

Снова паттерны.

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

Итак, возьмём пример из предыдущего поста - эльфийское воинство, состоящее из магов, воинов, лучников. Для эффективного создания этих юнитов мы используем "фабрику эльфов" с тремя фабричными методами для каждого типа юнита соответственно. Теперь мы хотим создать подобный механизм для, например, орков, но при этом создать унифицированный интерфейс доступа к ним для того, чтобы впоследствии иметь возможность добавления ещё игровых рас: людей, дроу, нежити и т.д.

среда, 26 сентября 2012 г.

Фабричный метод (Фабрика)

Курим паттерны вместе. Для начала что-нибудь несложное. К примеру, Фабричный метод или Фабрика (Factory).

Итак, допустим, пишем мы игру. И в ней у нас есть эльфы. Обычные такие эльфы, среди которых есть лучники, маги, пехотинцы. И есть список юнитов, среди которых вперемешку лежат все три разновидности этих самых юнитов.

Для начала создадим базовый класс Unit. Это будет абстрактный класс, в котором будет содержаться общий для всех метод Attack();