Здравствуйте, сегодня мы разберем очень полезный паттерн проектирования – фабрика. Возьмем наш код из статьи про паттерн декоратор. Допустим у нас есть класс, в котором мы храним характеристики игрока. Это обычный класс данных с 4-мя параметрами. Класс игрока имеет метод, который правильно посчитает параметры, в зависимости от расы персонажа. Допустим, что существует окно, где показаны начальные характеристики персонажа. И у нас уже получается дублирование кода, что не есть хорошо. Но обычно таких мест бывает больше двух, а теперь представьте, что нужно будет добавить в игру еще одну расу, для этого придется переписывать код в каждом месте. Решением обычно является вынесение создания нового объекта в отдельный класс, например, InitialStateProvider. Это единственное место, которое может вернуть характеристики персонажа, во всех остальных местах нужно будет только вызвать соответствующий метод. Тем самым мы полностью инкапсулировали метод создания объекта в зависимости от условий. Полу