are::-Square” « endl; } }: Sha

Автор admin Пятница, 19 июня 2009 11:32

are::-Square” « endl; } }: Shape* Shape::factory(const strings type) throw(Shape::BadShapeCreation) { if(type = “Circle”) return new Circle; if(type «= “Square”) return new Square; throw BadShapeCreation(type); } char* si[] = { “Circle”. “Square”, “Square”. “Circle”. “Circle”. “Circle”. “Square” }; int mainO { vector shapes; try { for(size_t i – 0: i < sizeof si / sizeof sl[0]: i++) shapes.push_back(Shape::factory(si[i])): } catch(Shape::BadShapeCreation e) { cout « e.whatO « endl; purge(shapes); return EXITJAILURE: } for(size_t 1=0: i < shapes.sizeO: i++) { shapes[i]->draw(); shapes[i]->erase(); } purge(shapes): } ///:- Функция factoryO получает аргумент, по которому определяется тип создаваемого объекта Shape. В нашем примере аргумент относится к типу string, но он может 498 Глава 10 • Паттерны проектирования содержать произвольный набор данных. При добавлении в систему нового типа Shape все изменения вносятся только в функции factory() (предполагается, что данные для инициализации объектов поступают извне; жестко закодированный массив показан только для примера). Чтобы объекты создавались то


Комментарии закрыты.