пишу сюда.
Я читаю про патnерны проектирования. Есть утверждение про factory method, которое я не понимаю:
"Система должна оставаться расширяемой путем добавления объектов новых типов. Непосредственное использование выражения new является нежелательным, так как в этом случае код создания объектов с указанием конкретных типов может получиться разбросанным по всему приложению. Тогда такие операции как добавление в систему объектов новых типов или замена объектов одного типа на другой будут затруднительными"
вот реально не понимаю, было так:
int main() {
Animal* animal = new Dog(); // Создание объекта Dog
animal->makeSound(); // Woof!
delete animal; // Освобождение памяти
Animal* bird = new Bird(); // Создание объекта Bird
bird->makeSound(); // Chirp!
delete bird; // Освобождение памяти
return 0;
}
А станет так:
int main() {
AnimalFactory* factory = new DogFactory(); // Создание фабрики для Dog
Animal* animal = factory->createAnimal(); // Создание объекта Dog
animal->makeSound(); // Woof!
delete animal; // Освобождение памяти
delete factory; // Освобождение памяти
factory = new BirdFactory(); // Создание фабрики для Bird
animal = factory->createAnimal(); // Создание объекта Bird
animal->makeSound(); // Chirp!
delete animal; // Освобождение памяти
delete factory; // Освобождение памяти
return 0;
}
Так в чём профит???? раньше у нас было
Animal* animal = new Dog();
разбросано по коду, а теперь будет разбросано по коду
AnimalFactory* factory = new DogFactory(); // Создание фабрики для Dog
Animal* animal = factory->createAnimal();
в @supapro
сейчас попробовал - не пускают
Получается всё сводится к ещё одному слою индирекции вокруг создания объекта.
Обсуждают сегодня